Сводка
Создает пользователя базы данных с правами доступа для создания данных в базе.
Использование
Инструмент может использоваться с базами Oracle, Microsoft SQL Server или PostgreSQL. Инструмент не поддерживается облачными сервисами баз данных.
Для Oracle и SQL Server, если уже существует имя входа в операционную систему, инструмент Создать пользователя базы данных может добавить его как имя пользователя указанной базы данных.
Вы не можете создать пользователя базы данных для группы Windows.
Этот инструмент создает для пользователя общий файл журнала tables при запуске в базе геоданных на Oracle.
Пользователи, созданные в базе данных, могут получить следующие права:
СУБД Права доступа Oracle
CREATE PROCEDURE
CREATE SESSION
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
SELECT ON DBA_ROLES
PostgreSQL
CONNECT
TEMPORARY
USAGE для схемы sde, если пользователь создан в базе геоданных или базе данных с установленным типом ST_Geometry
SELECT, INSERT, UPDATE и DELETE для представлений geometry_columns и geography_columns, и SELECT для представления spatial_ref_sys, если PostGIS установлен в базу данных
SQL Server
CREATE TABLE
CREATE PROCEDURE
CREATE VIEW
Если имя пользователя не существует в экземпляре SQL Server или кластере базы данных PostgreSQL, инструмент Создать пользователя базы данных добавит имя пользователя, создаст пользователя, указанного в параметре Входное подключение базы данных и создаст схему для пользователя в базе данных. Указанная база данных становится базой данных пользователя по умолчанию в SQL Server.
Если учетное имя уже существует в данном экземпляре SQL Server, инструмент Создать пользователя базы данных добавляет пользователя в базу данных, указанную параметром Входное подключение к базе данных, и создает соответствующую схему. База данных пользователя по умолчанию в SQL Server не меняется.
Если учетное имя уже существует в данном кластере базы данных PostgreSQL, инструмент Создать пользователя базы данных создает соответствующую ему схему в базе данных, указанной параметром Входное подключение к базе данных.
С помощью этого инструмента невозможно создать имя пользователя "sde". Пользователь sde является администратором базы геоданных и требует больше прав доступа, чем дает инструмент Создать пользователя базы данных.
Вы не можете использовать разделители, такие как двойные кавычки, при указании имени пользователя. Имя пользователя может содержать только символы, поддерживаемые СУБД, когда оно вводится без разделителей.
Синтаксис
arcpy.management.CreateDatabaseUser(input_database, {user_authentication_type}, user_name, {user_password}, {role}, {tablespace_name})
Параметр | Объяснение | Тип данных |
input_database | Укажите файл подключения к базе данных или многопользовательской базе геоданных для Oracle, PostgreSQL или SQL Server. Убедитесь, что подключение выполнено с правами пользователя - администратора базы данных. При подключении к Oracle, необходимо выполнить вход как пользователь sys. | Workspace |
user_authentication_type (Дополнительный) | Укажите тип аутентификации для пользователя. Если вы указываете OPERATING_SYSTEM_USER, имя пользователя в операционной системе должно уже существовать для пользователя, которого вы желаете создать. Пользователи операционной системы поддерживаются только для баз данных SQL Server и Oracle.
| Boolean |
user_name | Введите имя нового пользователя базы данных. Если необходимо создать пользователя базы данных с именем входа в операционную систему, укажите соответствующее имя входа. | String |
user_password (Дополнительный) | Введите пароль нового пользователя. Пароль должен соответствовать требованиям парольной политики базы данных. Если создается пользователь базы данных для имени входа в операционную систему, вводить данные не требуется. | Encrypted String |
role (Дополнительный) | Если требуется добавить нового пользователя к существующей роли, укажите имя роли. | String |
tablespace_name (Дополнительный) | При создании пользователя в базе данных Oracle, укажите имя табличного пространства, которое будет использовано по умолчанию, как табличное пространство для пользователя. Можно указать предварительно настроенное табличное пространство, в противном случае (если оно еще не существует) оно будет создано в местоположении Oracle по умолчанию и будет иметь размер 400 Мб. Если табличное пространство не указано, табличное пространство по умолчанию становится табличным пространством Oracle для пользователя по умолчанию. | String |
Производные выходные данные
Имя | Объяснение | Тип данных |
out_result | Успешно ли инструмент завершил работу. | Boolean |
Пример кода
CreateDatabaseUser, пример 1 (окно Python)
В этом примере скрипт использует ранее созданный файл подключения к базе данных (oracledb1.sde) для создания пользователя базы данных в Oracle и табличного пространства по умолчанию для него (sdetbs)
import arcpy
arcpy.CreateDatabaseUser_management("C:/myconnections/oracledb1.sde",
"DATABASE_USER", "map", "Pam987", "sdetbs")
CreateDatabaseUser, пример 2 (окно Python)
Пример скрипта создает входную рабочую область (pgconn.sde) в папке с именем подключения и создает роль учетной записи базы данных и схему в PostgreSQL.
import arcpy
arcpy.CreateDatabaseConnection_management("C:/connections", "pgconn.sde",
"POSTGRESQL", myserver, mypgdb,
"DATABASE_AUTH", "ela", "3L@pwd",
"SAVE_USERNAME")
arcpy.CreateDatabaseUser_management("C:/connections/pgconn.sde",
"DATABASE_USER", "dataowner", "N0look")
CreateDatabaseUser, пример 3 (окно Python)
Пример скрипта создает пользователя базы данных, сопоставленного с учетной записью ОС (mynet\vorhoos) в SQL Server и использует ранее созданный файл подключения к базе данных (connection_ssi.sde)
import arcpy
arcpy.CreateDatabaseUser_management("C:/gdbconnections/connection_ssi.sde",
"OPERATING_SYSTEM_USER", "mynet\\vorhoos")
CreateDatabaseUser, пример 4 (автономный скрипт)
Приведенный автономный скрипт Python позволит вам ввести необходимую для вашего сайта информацию с помощью опций создания пользователя базы данных:
"""
Name: create_database_user.py
Description: Provide connection information to a database user.
Type create_database_user.py -h or create_database_user.py --help for usage
"""
# Import system modules
import arcpy
import os
import optparse
import sys
# Define usage and version
parser = optparse.OptionParser(usage = "usage: %prog [Options]", version="%prog 1.0 for 10.1 release")
#Define help and options
parser.add_option ("--DBMS", dest="Database_type", type="choice", choices=['SQLSERVER', 'ORACLE', 'POSTGRESQL', ''], default="", help="Type of enterprise DBMS: SQLSERVER, ORACLE, or POSTGRESQL.")
parser.add_option ("-i", dest="Instance", type="string", default="", help="DBMS instance name")
parser.add_option ("-D", dest="Database", type="string", default="none", help="Database name: Not required for Oracle")
parser.add_option ("--auth", dest="Account_authentication", type ="choice", choices=['DATABASE_AUTH', 'OPERATING_SYSTEM_AUTH'], default='DATABASE_AUTH', help="Authentication type options (case-sensitive): DATABASE_AUTH, OPERATING_SYSTEM_AUTH. Default=DATABASE_AUTH")
parser.add_option ("-U", dest="Dbms_admin", type="string", default="", help="DBMS administrator user")
parser.add_option ("-P", dest="Dbms_admin_pwd", type="string", default="", help="DBMS administrator password")
parser.add_option ("--utype", dest="user_type", type ="choice", choices=['DATABASE_USER', 'OPERATING_SYSTEM_USER'], default='DATABASE_USER', help="Authentication type options (case-sensitive): DATABASE_USER, OPERATING_SYSTEM_USER. Default=DATABASE_USER")
parser.add_option ("-u", dest="dbuser", type="string", default="", help="database user name")
parser.add_option ("-p", dest="dbuser_pwd", type="string", default="", help="database user password")
parser.add_option ("-r", dest="role", type="string", default="", help="role to be granted to the user")
parser.add_option ("-t", dest="Tablespace", type="string", default="", help="Tablespace name")
# Check if value entered for option
try:
(options, args) = parser.parse_args()
#Check if no system arguments (options) entered
if len(sys.argv) == 1:
print "%s: error: %s\n" % (sys.argv[0], "No command options given")
parser.print_help()
sys.exit(3)
#Usage parameters for spatial database connection
database_type = options.Database_type.upper()
instance = options.Instance
database = options.Database.lower()
account_authentication = options.Account_authentication.upper()
dbms_admin = options.Dbms_admin
dbms_admin_pwd = options.Dbms_admin_pwd
dbuser = options.dbuser
dbuser_pwd = options.dbuser_pwd
tablespace = options.Tablespace
user_type = options.user_type
role = options.role
if (database_type == "SQLSERVER"):
database_type = "SQL_SERVER"
if( database_type ==""):
print(" \n%s: error: \n%s\n" % (sys.argv[0], "DBMS type (--DBMS) must be specified."))
parser.print_help()
sys.exit(3)
if(database_type == "SQL_SERVER"):
if( account_authentication == "DATABASE_AUTH" and dbms_admin == ""):
print("\n%s: error: %s\n" % (sys.argv[0], "DBMS administrator must be specified with database authentication"))
sys.exit(3)
if( account_authentication == "OPERATING_SYSTEM_AUTH" and dbms_admin != ""):
print("\nWarning: %s\n" % ("Ignoring DBMS administrator specified when using operating system authentication..."))
else:
if( dbuser.lower() == ""):
print("\n%s: error: %s\n" % (sys.argv[0], "Database user must be specified."))
sys.exit(3)
if( dbms_admin == ""):
print("\n%s: error: %s\n" % (sys.argv[0], "DBMS administrator must be specified!"))
sys.exit(3)
if ( user_type == "DATABASE_USER" and (dbuser =="" or dbuser_pwd =="")):
print(" \n%s: error: \n%s\n" % (sys.argv[0], "To create database authenticated user, user name and password must be specified!"))
parser.print_help()
sys.exit(3)
# Get the current product license
product_license=arcpy.ProductInfo()
# Checks required license level
if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE':
print("\n" + product_license + " license found!" + " Creating a user in an enterprise geodatabase or database requires an ArcGIS Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS Server license.")
sys.exit("Re-authorize ArcGIS before creating a database user.")
else:
print("\n" + product_license + " license available! Continuing to create...")
arcpy.AddMessage("+++++++++")
# Local variables
instance_temp = instance.replace("\\","_")
instance_temp = instance_temp.replace("/","_")
instance_temp = instance_temp.replace(":","_")
Conn_File_NameT = instance_temp + "_" + database + "_" + dbms_admin
if os.environ.get("TEMP") == None:
temp = "c:\\temp"
else:
temp = os.environ.get("TEMP")
if os.environ.get("TMP") == None:
temp = "/usr/tmp"
else:
temp = os.environ.get("TMP")
Connection_File_Name = Conn_File_NameT + ".sde"
Connection_File_Name_full_path = temp + os.sep + Conn_File_NameT + ".sde"
# Check for the .sde file and delete it if present
arcpy.env.overwriteOutput=True
if os.path.exists(Connection_File_Name_full_path):
os.remove(Connection_File_Name_full_path)
try:
print("\nCreating Database Connection File...\n")
# Process: Create Database Connection File...
# Usage: out_file_location, out_file_name, DBMS_TYPE, instnace, database, account_authentication, username, password, save_username_password(must be true)
#arcpy.CreateDatabaseConnection_management(temp , Connection_File_Name, database_type, instance, database, account_authentication, dbms_admin, dbms_admin_pwd, "TRUE")
arcpy.CreateDatabaseConnection_management(out_folder_path=temp, out_name=Connection_File_Name, database_platform=database_type, instance=instance, database=database, account_authentication=account_authentication, username=dbms_admin, password=dbms_admin_pwd, save_user_pass="TRUE")
for i in range(arcpy.GetMessageCount()):
if "000565" in arcpy.GetMessage(i): #Check if database connection was successful
arcpy.AddReturnMessage(i)
arcpy.AddMessage("\n+++++++++")
arcpy.AddMessage("Exiting!!")
arcpy.AddMessage("+++++++++\n")
sys.exit(3)
else:
arcpy.AddReturnMessage(i)
arcpy.AddMessage("+++++++++\n")
print("Creating database user...\n")
arcpy.CreateDatabaseUser_management(input_workspace=Connection_File_Name_full_path, user_authentication_type=user_type, user_name=dbuser, user_password=dbuser_pwd, role=role, tablespace_name=tablespace)
for i in range(arcpy.GetMessageCount()):
arcpy.AddReturnMessage(i)
arcpy.AddMessage("+++++++++\n")
except:
for i in range(arcpy.GetMessageCount()):
arcpy.AddReturnMessage(i)
#Check if no value entered for option
except SystemExit as e:
if e.code == 2:
parser.usage = ""
print("\n")
parser.print_help()
parser.exit(2)
Параметры среды
Информация о лицензиях
- Basic: Нет
- Standard: Да
- Advanced: Да