Краткая информация
Инструмент Создать пользователя базы данных создает пользователя базы данных с правами доступа для создания данных в базе.
Использование
Этот инструмент можно использовать только с Oracle, Microsoft SQL Server и PostgreSQL. (Не поддерживается базой данных Microsoft Azure SQL.)
Для Oracle и SQL Server, если уже существует имя входа в операционную систему, инструмент Создать пользователя базы данных может добавить его как имя пользователя указанной базы данных.
Вы не можете создать пользователя базы данных для группы Windows.
Пользователи, созданные в базе данных, могут получить следующие права:
СУБД Права доступа Oracle
CREATE SESSION
CREATE SEQUENCE
CREATE TRIGGER
CREATE VIEW
CREATE TABLE
SELECT ON DBA_ROLES
PostgreSQL
USAGE для схемы sde, если пользователь создан в базе геоданных или базе данных с установленным типом ST_Geometry
SELECT, INSERT, UPDATE, DELETE для таблицы public.geometry_columns и SELECT для таблицы public.spatial_ref_systable, если установлен тип геометрии PostGIS
SQL Server
CREATE TABLE
CREATE PROCEDURE
CREATE VIEW
VIEW DEFINITION
Если учетное имя в используемом экземпляре SQL Server или кластере базы данных PostgreSQL не существует, инструмент Создать пользователя базы данных создает новое имя пользователя в базе, указанной параметром Входная база данных, и создает там же схему для этого пользователя. Указанная база данных становится базой данных пользователя по умолчанию в SQL Server.
Если учетное имя уже существует в данном экземпляре SQL Server, инструмент Создать пользователя базы данных добавляет пользователя в базу данных, указанную параметром Входная база данных, и создает соответствующую схему. База данных пользователя по умолчанию в SQL Server не меняется.
Если учетное имя уже существует в данном кластере базы данных PostgreSQL, инструмент Создать пользователя базы данных создает соответствующую ему схему в базе данных, указанной параметром Входная база данных.
С помощью этого инструмента невозможно создать имя пользователя "sde". Пользователь sde является администратором базы геоданных и требует больше прав доступа, чем дает инструмент Создать пользователя базы данных.
Вы не можете использовать разделители, такие как двойные кавычки, при указании имени пользователя. Имя пользователя может содержать только символы, поддерживаемые СУБД, когда оно вводится без разделителей.
Синтаксис
CreateDatabaseUser_management (input_database, {user_authentication_type}, user_name, {user_password}, {role}, {tablespace_name})
Параметр | Объяснение | Тип данных |
input_database | Укажите файл подключения к базе данных или к многопользовательской базе геоданных в СУБД Oracle, PostgreSQL или SQL Server. Убедитесь, что в файле подключения прописано подключение непосредственно к базе данных (не к сервису ArcSDE) и что подключение создано пользователем с правами администратора. При подключении к Oracle, необходимо выполнить вход как пользователь sys. | Workspace |
user_authentication_type (дополнительно) | Используйте эту опцию, только если имя для входа в операционную систему, в которой требуется добавить пользователя базы данных, уже существует. Поддерживается только для баз данных SQL Server и Oracle.
| Boolean |
user_name | Введите имя нового пользователя базы данных. Если необходимо создать пользователя базы данных с именем входа в операционную систему, укажите соответствующее имя входа. | String |
user_password (дополнительно) | Введите пароль нового пользователя. Пароль должен соответствовать требованиям парольной политики базы данных. Если создается пользователь базы данных для имени входа в операционную систему, вводить данные не требуется. | Encrypted String |
role (дополнительно) | Если требуется добавить нового пользователя к существующей роли, введите имя роли. | String |
tablespace_name (дополнительно) | При создании пользователя в базе данных Oracle введите укажите имя табличного пространства, которое будет использоваться как табличное пространство по умолчанию для пользователя. Можно указать предварительно настроенное табличное пространство, в противном случае (если оно еще не существует) оно будет создано в местоположении Oracle по умолчанию и будет иметь размер 400 Мб. Если табличное пространство не указано, табличное пространство Oracle по умолчанию становится табличным пространством для пользователя по умолчанию. | String |
Пример кода
CreateUser Пример 1
Использует ранее созданный файл подключения к базе данных (oracledb1.sde) для создания пользователя базы данных в Oracle и табличного пространство по умолчанию для него (sdetbs)
#Import arcpy module
import arcpy
arcpy.CreateDatabaseUser_management("C:/myconnections/oracledb1.sde", "DATABASE_USER", "map", "Pam987", "sdetbs")
CreateUser Пример 2
Создает входную рабочую область (pgconn.sde) в папке с именем подключения и создает роль учетной записи базы данных и схему в PostgreSQL
#Import arcpy module
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")
CreateUser Пример 3
Создает пользователя базы данных, сопоставленного с учетной записью ОС (mynet\vorhoos) в SQL Server и использует ранее созданный файл подключения к базе данных (connection_ssi.sde)
#Import arcpy module
import arcpy
arcpy.CreateDatabaseUser_management("C:/gdbconnections/connection_ssi.sde", "OPERATING_SYSTEM_USER", "mynet\\vorhoos", "", "")
CreateUser Пример 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
Author: Esri
"""
# 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 for Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS for 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)