Создать пользователя базы данных (Управление данными)

Краткая информация

Создает пользователя базы данных с правами доступа для создания данных в базе.

Использование

  • Инструмент можно использовать только с Oracle, Microsoft SQL Server, PostgreSQL или SAP HANA. Инструмент не поддерживается облачными сервисами баз данных.

  • Для Oracle и SQL Server, если существует имя учетной записи в операционной системе, инструмент может добавить это имя в качестве пользователя указанной базы данных, но имя учетной записи и имя пользователя должны совпадать.

  • Вы не можете создать пользователя базы данных для группы Microsoft Windows.

  • Этот инструмент создает для пользователя файл журнала tables при запуске в базе геоданных на Oracle.

  • Если имя пользователя не существует в экземпляре SQL Server или в кластере базы данных PostgreSQL, инструмент добавит имя пользователя, создаст пользователя в базе данных, указанной как значение параметра Входное подключение базы данных, и создаст схему для пользователя в этой базе данных. Указанная база данных становится базой данных пользователя по умолчанию в SQL Server.

  • Если имя пользователя существует в данном экземпляре SQL Server, инструмент добавит пользователя в базу данных, указанную как значение параметра Входное подключение базы данных, и создаст соответствующую схему. База данных пользователя по умолчанию в SQL Server не меняется.

  • Если имя пользователя существует в кластере базы данных PostgreSQL, инструмент создаст соответствующую ему схему в базе данных, указанной как значение параметра Входное подключение базы данных.

  • С помощью этого инструмента невозможно создать имя пользователя "sde". Пользователь sde является администратором базы геоданных и требует больше прав доступа, чем предоставляет этот инструмент.

  • Вы не можете использовать разделители, такие как двойные кавычки, при указании имени пользователя. Имя пользователя может содержать только символы, поддерживаемые СУБД, когда оно вводится без разделителей.

  • Пользователи, созданные в базе данных, могут получить следующие права:

    СУБДПрава доступа

    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.

    Если пользователь создан в SAP HANA 2.0 SPS 08 rev 81 и позже или в SAP HANA Cloud, права доступа EXECUTE предоставлены на следующие процедуры:

    • ACQUIRE_APPLICATION_LOCK
    • RELEASE_APPLICATION_LOCK

Параметры

ПодписьОписаниеТип данных
Входное подключение к базе данных

Файл подключения к базе данных Oracle, PostgreSQL, SQL Server или корпоративной базе геоданных в этих базах данных. Убедитесь, что подключение осуществляется от имени пользователя с правами на создание пользователей в базе данных. При подключении к Oracle, необходимо выполнить вход как пользователь sys.

Workspace
Создание авторизованного пользователя операционной системы
(Дополнительный)

Определяет тип авторизации для пользователя. Отметьте этот параметр только в том случае, если для создаваемого вами пользователя уже существует учетная запись операционной системы. Этот параметр поддерживается только базами данных SQL Server и Oracle.

  • Отмечено – создается пользователь с аутентификацией средствами операционной системы. Должно существовать соответствующее имя для входа в систему.
  • Не отмечено – создается пользователь с аутентификацией средствами базы данных. Это значение по умолчанию
Boolean
Пользователь базы данных

Имя нового пользователя базы данных.

Если вы создаете пользователя базы данных для имени входа в операционную систему, имя пользователя должно совпадать с именем входа в систему.

String
Пароль пользователя базы данных
(Дополнительный)

Пароль для нового пользователя. Пароль должен соответствовать требованиям парольной политики базы данных.

Если вы создаете пользователя базы данных для имени входа в операционную систему, вводить данные не требуется.

Encrypted String
Роль
(Дополнительный)

Имя существующей роли базы геоданных, к которой будет добавлен новый пользователь.

String
Имя табличного пространства
(Дополнительный)

Имя табличного пространства, которое будет использовано как табличное пространство по умолчанию для нового пользователя базы данных Oracle. Можно указать предварительно настроенное табличное пространство, в противном случае (если оно еще не существует) оно будет создано в местоположении по умолчанию Oracle и будет иметь размер 400 Мб. Если табличное пространство не указано, табличное пространство по умолчанию становится табличным пространством для пользователя Oracle по умолчанию.

String

Производные выходные данные

ПодписьОписаниеТип данных
Пользователь базы данных создан

Успешно ли инструмент завершил работу.

Boolean

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.

  • DATABASE_USERБудет создан пользователь с аутентификацией средствами базы данных. Это значение по умолчаниюЕсли ваша СУБД не настроена для использования аутентификации средствами базы данных, не используйте эту опцию.
  • OPERATING_SYSTEM_USERБудет создан пользователь с аутентификацией средствами операционной системы. Должно существовать соответствующее имя для входа в систему.Если ваша СУБД не настроена для использования аутентификации средствами операционной системы, не используйте эту опцию.
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.management.CreateDatabaseUser("C:/myconnections/oracledb1.sde", 
                                    "DATABASE_USER", "map", "Pam987", "sdetbs")
CreateDatabaseUser, пример 2 (окно Python)

Пример скрипта создает входную рабочую область (pgconn.sde) в папке с именем подключения и создает роль учетной записи базы данных и схему в PostgreSQL.

import arcpy
arcpy.management.CreateDatabaseConnection("C:/connections", "pgconn.sde", 
                                          "POSTGRESQL", myserver, mypgdb, 
                                          "DATABASE_AUTH", "ela", "3L@pwd", 
                                          "SAVE_USERNAME")
arcpy.management.CreateDatabaseUser("C:/connections/pgconn.sde", 
                                    "DATABASE_USER", "dataowner", "N0look")
CreateDatabaseUser, пример 3 (окно Python)

Пример скрипта создает пользователя базы данных, сопоставленного с учетной записью ОС (mynet\vorhoos) в SQL Server и использует ранее созданный файл подключения к базе данных (connection_ssi.sde)

import arcpy
arcpy.management.CreateDatabaseUser("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...
        arcpy.management.CreateDatabaseConnection(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.management.CreateDatabaseUser(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: Да

Связанные разделы