В Microsoft SQL Server администратор базы данных добавляет учетные записи к экземпляру SQL Server, эти учетные записи сопоставляются с пользователями в отдельных базах данных в экземпляре SQL Server. Пользователи базы данных, которые создают таблицы и классы объектов, должны иметь соответствующие права доступа для создания объектов в базе данных и схему, в которой будут созданы эти объекты. При использовании в ArcGIS имя схемы должно совпадать с именем пользователя базы данных.
Для этого вы можете использовать инструмент геообработки или скрипт Создать пользователя базы данных чтобы выполнить следующие операции:
- Создать или добавить учетную запись к экземпляру SQL Server.
- Создать пользователя, соответствующего указанной учетной записи.
- Создать схему сопоставления для пользователя в указанной базе данных.
- Предоставить пользователю права доступа, необходимые для создания таблиц, классов объектов или представлений в указанной базе данных.
Добавить пользователя, который может создавать данные.
Вы можете запустить инструмент Создать пользователя базы данных из ArcGIS Desktop или вызвать инструмент в скрипте Python для создания пользователя базы данных, который может создавать таблицы, классы объектов и представления.
Вы должны подключиться к базе данных используя учетную запись с правами системного администратора в экземпляре SQL Server, чтобы запустить инструмент Создать пользователя базы геоданных tool.
Если вы хотите создать пользователя базы геоданных с учетной записью Windows, соответствующая учетная запись должна уже существовать до того, как вы запустите инструмент.
Использование инструмента Создать пользователя базы данных
- Запустите клиент ArcGIS Desktop.
- Подключитесь к базе данных или базе геоданных, используя учетную запись с правами системного администратора в экземпляре SQL Server.
- Откройте инструмент Создать пользователя базы данных.
Инструмент находится в группе инструментов Администрирование базы геоданных набора Управление данными.
- Укажите подключение к базе данных в поле Входное подключение к базе данных.
- Выберите, будете ли вы создавать учетную запись с аутентификацией SQL Server или использовать существующую учетную запись с аутентификацией Windows.
- Оставьте Создать пользователя с аутентификацией средствами операционной системы не отмеченным, чтобы создать пользователя с аутентификацией средствами SQL Server. Обратите внимание, что по умолчанию экземпляры SQL Server используют только аутентификацию Windows. Если ваш экземпляр не настроен для использования аутентификации SQL Server или Windows, вы не сможете создать пользователя с аутентификацией средствами базы данных.
- Отметьте Создать пользователя с аутентификацией средствами операционной системы, чтобы использовать существующую учетную запись с аутентификацией средствами Windows.
- Введите имя пользователя базы данных, который будет создан инструментом.
Если вы выберите создание учетной записи с аутентификацией SQL Server, имя, которое вы введете, также будет использовано для учетной записи.
- Введите пароль пользователя базы данных.
- Если у вас уже определена роль, к которой вы хотите добавить пользователя, укажите ее.
- Щелкните OK (ArcMap) или Запустить (ArcGIS Pro).
Запустите скрипт Python
Чтобы создать пользователя с помощью скрипта, выполните следующие шаги:
- Создайте текстовый файл на клиентском компьютере ArcGIS и скопируйте следующий скрипт в файл.
""" 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)
Вы можете запустить скрипт на компьютере с установленным ArcGIS Desktop (Standard или Advanced), ArcGIS Server (Standard или Advanced) или ArcGIS Engine с дополнительным модулем Geodatabase Update.
- Сохраните файл с расширением .py.
- Запустите скрипт, задав опции и указав сведения, соответствующие вашему экземпляру SQL Server и пользователю, которого вы хотите создать.
В следующем примере имя созданного скрипта – create_database_user.py. В экземпляре SQL Server ssi5 создана учетная запись с аутентификацией SQL Server (gisd_owner), а также соответствующая схема и пользователь созданы а в базе данных gisdata. Пользователь не добавлен к роли.
create_database_user.py --DBMS SQL_SERVER -i ssi5 -D gisdata --auth DATABASE_AUTH -U sa -P !nocopy! --utype DATABASE_USER -u gisd_owner -p T3mpPass
Подсказка:
Введите -h или --help в командной строке для вывода справки синтаксиса.
Теперь ваша база данных содержит пользователя, который может создавать таблицы.
Так как набор данных существует, их владелец может предоставлять права доступа к данным другим пользователям. Инструкции см. в разделе Предоставление и отзыв прав доступа к наборам данных.
Создание учетных записей и пользователей с помощью инструментов SQL Server
Если вы хотите создать пользователя, которые имеет права, отличающиеся от предоставляемых инструментом Создать пользователя базы данных, или не имеет прав, предоставленным непосредственно ему, вы можете воспользоваться для этого инструментами SQL Server. Существует несколько вещей, о которых нужно помнить при создании собственных учетных записей и пользователей, которые будут использоваться с ArcGIS:
- Все пользователи базы данных, которые будут создавать данные, должны иметь схему базы данных. Эта схема должна иметь то же имя, что и пользователь.
- Вы можете предоставить группе Windows доступ к SQL Server, вместо использования отдельных учетных записей Windows, что упростит создание и управление учетными записями. Все участники группы Windows могут подключаться к SQL Server. Права доступа к серверу, базе данных или набору данных предоставленные группе, автоматически применяется к каждому участнику группы. Тем не менее, вы не можете создать одну схему для хранения данных, созданных всеми участниками группы. Каждый пользователь в группе, который создает данные в базе геоданных, должен иметь собственную схему, где хранятся данные. SQL Server создает пользователя и схему в базе данных при первой попытке создания данных участником группы. Это происходит автоматически; вручную создавать схему и пользователя не нужно.
Инструкции по использованию инструментов SQL Server для создания учетных записей, пользователей и схем смотри в документации к Microsoft SQL Server.