Zusammenfassung
Erstellt einen Datenbankbenutzer mit ausreichenden Berechtigungen zum Erstellen von Daten in der Datenbank.
Verwendung
Dieses Werkzeug kann nur mit Oracle, Microsoft SQL Server oder PostgreSQL verwendet werden. Dieses Werkzeug wird von Cloud-Datenbanken wie Amazon Relational Database Services (RDS), Microsoft Azure SQL Database oder Azure Database for PostgreSQL nicht unterstützt.
Für Oracle und SQL Server kann mit dem Werkzeug Datenbankbenutzer erstellen eine bereits vorhandene Betriebssystemanmeldung als Benutzer für die angegebene Datenbank hinzugefügt werden.
Für eine Windows-Gruppe kann kein Datenbankbenutzer erstellt werden.
Dieses Werkzeug erstellt gemeinsame Protokolldateitabellen für den Benutzer, wenn es auf einer Geodatabase in Oracle ausgeführt wird.
Den in der Datenbank erstellten Benutzern werden folgende Berechtigungen gewährt:
DBMS Berechtigungen Oracle
CREATE PROCEDURE
CREATE SESSION
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
SELECT ON DBA_ROLES
PostgreSQL
CONNECT
TEMPORARY
USAGE-Berechtigungen für das SDE-Schema, wenn der Benutzer in einer Geodatabase oder einer Datenbank, in der der Typ "ST_Geometry" installiert ist, erstellt wurde
SELECT, INSERT, UPDATE, und DELETE in den Sichten geometry_columns und geography_columns sowie SELECT in der Sicht spatial_ref_sys, wenn PostGIS in der Datenbank installiert ist
SQL Server
CREATE TABLE
CREATE PROCEDURE
CREATE VIEW
Wenn das Anmeldekonto bei der SQL Server-Instanz oder im PostgreSQL-Datenbank-Cluster nicht vorhanden ist, dann wird mit dem Werkzeug Datenbankbenutzer erstellen das Anmeldekonto hinzugefügt, ein Benutzer in der Datenbank, die unter Eingabe-Datenbankverbindung angegeben ist, erstellt und ein Schema für den Benutzer in der Datenbank erstellt. Die angegebene Datenbank wird als Standarddatenbank des Benutzers in SQL Server festgelegt.
Wenn in der SQL Server-Instanz das Anmeldekonto bereits vorhanden ist, wird mit dem Werkzeug Datenbankbenutzer erstellen der Benutzer in der unter Eingabe-Datenbankverbindung angegebenen Datenbank hinzugefügt und ein passendes Schema erstellt. Die Standarddatenbank des Benutzers wird in SQL Server nicht geändert.
Wenn im PostgreSQL-Datenbank-Cluster das Anmeldekonto bereits vorhanden ist, wird mit dem Werkzeug Datenbankbenutzer erstellen das passende Schema in der unter Eingabe-Datenbankverbindung angegebenen Datenbank erstellt.
Mit diesem Werkzeug kann kein Benutzer mit dem Namen "sde" erstellt werden. Der Benutzer "sde" ist ein Geodatabase-Administrator und benötigt mehr Berechtigungen, als vom Werkzeug Datenbankbenutzer erstellen gewährt werden.
Sie können keine Trennzeichen wie doppelte Anführungszeichen verwenden, wenn Sie einen Benutzernamen angeben. Der Benutzername kann nur Zeichen enthalten, die vom zugrunde liegenden Datenbankmanagementsystem unterstützt werden, wenn er ohne Trennzeichen bereitgestellt wird.
Syntax
CreateDatabaseUser(input_database, {user_authentication_type}, user_name, {user_password}, {role}, {tablespace_name})
Parameter | Erklärung | Datentyp |
input_database | Geben Sie die Verbindungsdatei zu einer Datenbank oder Enterprise-Geodatabase in Oracle, PostgreSQL oder SQL Server an. Stellen Sie sicher, dass die Verbindungsdatei eine direkte Verbindung mit der Datenbank (kein ArcSDE-Dienst) herstellt und dies als Datenbank-Administratorbenutzer erfolgt. Verbindungen zu Oracle müssen als "sys"-Benutzer hergestellt werden. | Workspace |
user_authentication_type (optional) | Geben Sie den Authentifizierungstyp für den Benutzer an. Wenn Sie OPERATING_SYSTEM_USER angeben, muss für den Benutzer, den Sie erstellen möchten, bereits eine Betriebssystemanmeldung vorhanden sein. Betriebssystembenutzer werden nur für SQL Server- und Oracle-Datenbanken unterstützt.
| Boolean |
user_name | Geben Sie einen Namen für den neuen Datenbankbenutzer ein. Wenn Sie einen Datenbankbenutzer für eine Betriebssystemanmeldung erstellen möchten, muss der Benutzername dem Anmeldenamen entsprechen. | String |
user_password (optional) | Geben Sie ein Kennwort für den neuen Benutzer ein. Die Kennwortrichtlinie der zugrunde liegenden Datenbank wird angewendet. Wenn Sie einen Datenbankbenutzer für ein Betriebssystem-Anmeldekonto erstellen möchten, ist keine Eingabe erforderlich. | Encrypted String |
role (optional) | Wenn Sie den neuen Benutzer einer bestehenden Datenbankrolle hinzufügen möchten, geben Sie den Namen der Rolle an. | String |
tablespace_name (optional) | Geben Sie beim Erstellen eines Benutzers in einer Oracle-Datenbank den Namen des Tablespace an, der als Standard-Tablespace für den Benutzer verwendet werden soll. Sie können einen vorkonfigurierten Tablespace angeben. Wenn der Tablespace noch nicht vorhanden ist, wird er im Standardspeicherverzeichnis von Oracle mit einer Größe von 400 MB erstellt. Wenn kein Tablespace angegeben wurde, wird der Oracle-Standard-Tablespace als Standard-Tablespace des Benutzers festgelegt. | String |
Abgeleitete Ausgabe
Name | Erklärung | Datentyp |
out_result | Gibt an, ob das Werkzeug erfolgreich beendet wurde. | Boolesch |
Codebeispiel
CreateDatabaseUser – Beispiel 1 (Python-Fenster)
Das Beispielskript verwendet eine vordefinierte Datenbankverbindungsdatei (oracledb1.sde), um einen Datenbankbenutzer in Oracle zu erstellen, und erstellt einen Standard-Tablespace (sdetbs) für den Benutzer.
import arcpy
arcpy.CreateDatabaseUser_management("C:/myconnections/oracledb1.sde",
"DATABASE_USER", "map", "Pam987", "sdetbs")
CreateDatabaseUser – Beispiel 2 (Python-Fenster)
Das Beispielskript erstellt einen Eingabe-Workspace (pgconn.sde) in einem Ordner namens "Connections", eine Anmelderolle für die Datenbank und ein Schema in 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 – Beispiel 3 (Python-Fenster)
Das Beispielskript erstellt einen Datenbankbenutzer, der einem vorhandenen Betriebssystem-Anmeldekonto (mynet\vorhoos) in SQL Server zugeordnet ist, und verwendet eine vordefinierte Datenbankverbindungsdatei (connection_ssi.sde).
import arcpy
arcpy.CreateDatabaseUser_management("C:/gdbconnections/connection_ssi.sde",
"OPERATING_SYSTEM_USER", "mynet\\vorhoos")
CreateDatabaseUser – Beispiel 4 (eigenständiges Skript)
Mit dem folgenden eigenständigen Skript können Sie spezifische Informationen für Ihre Site anhand von Optionen zum Erstellen eines Datenbankbenutzers angeben.
"""
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)
Umgebungen
Lizenzinformationen
- Basic: Nein
- Standard: Ja
- Advanced: Ja