Сводка
Создает пользователя базы данных с правами доступа для создания данных в базе.
Использование
Этот инструмент можно использовать только с Oracle, Microsoft SQL Server, PostgreSQ или SAP HANA. Инструмент не поддерживается облачными базами данных, такими как Amazon Relational Database Services (RDS), Microsoft Azure SQL Database или Azure Database for 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
SAP HANA
Инструмент создает стандартного пользователя SAP HANA.
Если имя входа пользователя в используемом экземпляре SQL Server или кластере базы данных PostgreSQL не существует, инструмент Создать пользователя базы данных создает новое имя пользователя в базе, указанной параметром Входное подключение к базе данных, и создает там же схему для этого пользователя. Указанная база данных становится базой данных пользователя по умолчанию в SQL Server.
Если учетное имя уже существует в данном экземпляре SQL Server, инструмент Создать пользователя базы данных добавляет пользователя в базу данных, указанную параметром Входное подключение к базе данных, и создает соответствующую схему. База данных пользователя по умолчанию в SQL Server не меняется.
Если учетное имя уже существует в данном кластере базы данных PostgreSQL, инструмент Создать пользователя базы данных создает соответствующую ему схему в базе данных, указанной параметром Входное подключение к базе данных.
С помощью этого инструмента невозможно создать имя пользователя "sde". Пользователь sde является администратором базы геоданных и требует больше прав доступа, чем дает инструмент Создать пользователя базы данных.
Вы не можете использовать разделители, такие как двойные кавычки, при указании имени пользователя. Имя пользователя может содержать только символы, поддерживаемые СУБД, когда оно вводится без разделителей.
Синтаксис
CreateDatabaseUser(input_database, {user_authentication_type}, user_name, {user_password}, {role}, {tablespace_name})
Parameter | Объяснение | Тип данных |
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 |
Производные выходные данные
Name | Объяснение | Тип данных |
out_result | Успешно ли инструмент завершил работу. | Boolean |
Пример кода
Пример скрипта использует ранее созданный файл подключения к базе данных (oracledb1.sde) для создания пользователя базы данных в Oracle и табличного пространство по умолчанию для него (sdetbs).
import arcpy
arcpy.CreateDatabaseUser_management("C:/myconnections/oracledb1.sde",
"DATABASE_USER", "map", "Pam987", "sdetbs")
Пример скрипта создает входную рабочую область (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")
Пример скрипта создает пользователя базы данных, сопоставленного с учетной записью ОС (mynet\vorhoos) в SQL Server и использует ранее созданный файл подключения к базе данных (connection_ssi.sde).
import arcpy
arcpy.CreateDatabaseUser_management("C:/gdbconnections/connection_ssi.sde",
"OPERATING_SYSTEM_USER", "mynet\\vorhoos")
Приведенный автономный скрипт 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)
Environments
Информация о лицензиях
- Basic: Нет
- Standard: Да
- Advanced: Да