Datenbankbenutzer erstellen (Data Management)

Zusammenfassung

Erstellt einen Datenbankbenutzer mit ausreichenden Berechtigungen zum Erstellen von Daten in der Datenbank.

Verwendung

  • Dieses Werkzeug kann mit Oracle, Microsoft SQL Server oder PostgreSQL verwendet werden. Für cloudbasierte Datenbank-Services wird dieses Werkzeug nicht unterstützt.

  • Für Oracle und SQL Server kann mit diesem Werkzeug eine bestehende Betriebssystemanmeldung als Benutzer für die angegebene Datenbank hinzugefügt werden, der Anmeldenamen und der Benutzername müssen jedoch identisch sein.

  • Für eine Microsoft Windows-Gruppe kann kein Datenbankbenutzer erstellt werden.

  • Dieses Werkzeug erstellt Protokolldateitabellen für den Benutzer, wenn es auf einer Geodatabase in Oracle ausgeführt wird.

  • Wenn das Anmeldekonto bei der SQL Server-Instanz oder im PostgreSQL-Datenbank-Cluster nicht vorhanden ist, wird mit diesem Werkzeug das Anmeldekonto hinzugefügt, ein Benutzer in der unter dem Parameter Eingabe-Datenbankverbindung angegebenen Datenbank 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 vorhanden ist, wird mit diesem Werkzeug der Benutzer in der unter dem Parameter 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 vorhanden ist, wird mit diesem Werkzeug das passende Schema in der unter dem Parameter Eingabe-Datenbankverbindung angegebenen Datenbank erstellt.

  • Mit diesem Werkzeug kann kein Benutzer mit dem Namen "sde" erstellt werden. Der SDE-Benutzer ist der Geodatabase-Administrator und benötigt mehr Berechtigungen, als von diesem Werkzeug gewährt werden.

  • Sie können keine Trennzeichen wie doppelte Anführungszeichen verwenden, wenn Sie einen Benutzernamen angeben. Bei der Angabe ohne Trennzeichen darf der Benutzername nur Zeichen enthalten, die vom zugrunde liegenden Datenbankmanagementsystem unterstützt werden.

  • Den in der Datenbank erstellten Benutzern werden folgende Berechtigungen gewährt:

    DBMSBerechtigungen

    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

Parameter

BeschriftungErläuterungDatentyp
Eingabe-Datenbankverbindung

Die Verbindungsdatei zu einer Oracle-, PostgreSQL- oder SQL Server-Datenbank oder einer Enterprise-Geodatabase in diesen Datenbanken. Stellen Sie sicher, dass die Verbindung als Benutzer mit Berechtigungen zum Erstellen von Benutzern in der Datenbank erstellt wird. Verbindungen zu Oracle müssen als "sys"-Benutzer hergestellt werden.

Workspace
Betriebssystem-authentifizierten Benutzer erstellen
(optional)

Gibt den Authentifizierungstyp für den Benutzer an. Verwenden Sie diesen Parameter nur, wenn bereits ein Betriebssystem-Anmeldekonto besteht, für das Sie einen Datenbankbenutzer erstellen möchten. Dieser Parameter wird nur für SQL Server- und Oracle-Datenbanken unterstützt.

  • Aktiviert: Ein Benutzer mit Betriebssystemauthentifizierung wird erstellt. Das entsprechende Anmeldekonto muss bereits vorhanden sein.
  • Deaktiviert: Ein Benutzer mit Datenbankauthentifizierung wird erstellt. Dies ist die Standardeinstellung.
Boolean
Datenbankbenutzer

Der Name des neuen Datenbankbenutzers.

Wenn Sie einen Datenbankbenutzer für eine Betriebssystemanmeldung erstellen, muss der Benutzername dem Anmeldenamen entsprechen.

String
Kennwort des Datenbankbenutzers
(optional)

Das Kennwort für den neuen Benutzer. Die Kennwortrichtlinie der zugrunde liegenden Datenbank wird angewendet.

Wenn Sie einen Datenbankbenutzer für ein Betriebssystem-Anmeldekonto erstellen, ist keine Eingabe erforderlich.

Encrypted String
Rolle
(optional)

Der Name der vorhandenen Datenbankrolle, zu der ein neuer Benutzer hinzugefügt werden soll.

String
Tablespace-Name
(optional)

Der Name des Tablespace, der als Standard-Tablespace für den neuen Benutzer in einer Oracle-Datenbank verwendet wird. Sie können einen vorkonfigurierten Tablespace angeben. Wenn der Tablespace 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

BeschriftungErläuterungDatentyp
Datenbankbenutzer wurde erstellt

Gibt an, ob das Werkzeug erfolgreich beendet wurde.

Boolean

arcpy.management.CreateDatabaseUser(input_database, {user_authentication_type}, user_name, {user_password}, {role}, {tablespace_name})
NameErläuterungDatentyp
input_database

Die Verbindungsdatei zu einer Oracle-, PostgreSQL- oder SQL Server-Datenbank oder einer Enterprise-Geodatabase in diesen Datenbanken. Stellen Sie sicher, dass die Verbindung als Benutzer mit Berechtigungen zum Erstellen von Benutzern in der Datenbank erstellt wird. Verbindungen zu Oracle müssen als "sys"-Benutzer hergestellt werden.

Workspace
user_authentication_type
(optional)

Gibt den Authentifizierungstyp für den Benutzer an. Wenn Sie OPERATING_SYSTEM_USER angeben, muss für den zu erstellenden Benutzer bereits eine Betriebssystemanmeldung vorhanden sein. Betriebssystembenutzer werden nur für SQL Server- und Oracle-Datenbanken unterstützt.

  • DATABASE_USEREin Benutzer mit Datenbankauthentifizierung wird erstellt. Dies ist die Standardeinstellung.Wenn das Datenbankmanagementsystem keine Datenbankauthentifizierung zulässt, sollten Sie diese Option nicht verwenden.
  • OPERATING_SYSTEM_USEREin Benutzer mit Betriebssystemauthentifizierung wird erstellt. Das entsprechende Anmeldekonto muss bereits vorhanden sein.Wenn das Datenbankmanagementsystem keine Betriebssystemauthentifizierung zulässt, sollten Sie diese Option nicht verwenden.
Boolean
user_name

Der Name des neuen Datenbankbenutzers.

Wenn Sie einen Datenbankbenutzer für eine Betriebssystemanmeldung erstellen, muss der Benutzername dem Anmeldenamen entsprechen.

String
user_password
(optional)

Das Kennwort für den neuen Benutzer. Die Kennwortrichtlinie der zugrunde liegenden Datenbank wird angewendet.

Wenn Sie einen Datenbankbenutzer für ein Betriebssystem-Anmeldekonto erstellen, ist keine Eingabe erforderlich.

Encrypted String
role
(optional)

Der Name der vorhandenen Datenbankrolle, zu der ein neuer Benutzer hinzugefügt werden soll.

String
tablespace_name
(optional)

Der Name des Tablespace, der als Standard-Tablespace für den neuen Benutzer in einer Oracle-Datenbank verwendet wird. Sie können einen vorkonfigurierten Tablespace angeben. Wenn der Tablespace 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

NameErläuterungDatentyp
out_result

Gibt an, ob das Werkzeug erfolgreich beendet wurde.

Boolean

Codebeispiel

CreateDatabaseUser: Beispiel 1 (Python-Fenster)

In diesem Beispielskript wird eine vordefinierte Datenbankverbindungsdatei (oracledb1.sde) verwendet, um einen Datenbankbenutzer in Oracle zu erstellen, und ein Standard-Tablespace (sdetbs) für den Benutzer erstellt.

import arcpy
arcpy.management.CreateDatabaseUser("C:/myconnections/oracledb1.sde", 
                                    "DATABASE_USER", "map", "Pam987", "sdetbs")
CreateDatabaseUser: Beispiel 2 (Python-Fenster)

In diesem Beispielskript wird ein Eingabe-Workspace (pgconn.sde) in einem Ordner namens "Connections", eine Anmelderolle für die Datenbank und ein Schema in PostgreSQL erstellt.

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: Beispiel 3 (Python-Fenster)

In diesem Beispielskript wird ein Datenbankbenutzer, der einem vorhandenen Betriebssystem-Anmeldekonto (mynet\vorhoos) in SQL Server zugeordnet ist, erstellt und eine vordefinierte Datenbankverbindungsdatei (connection_ssi.sde) verwendet.

import arcpy
arcpy.management.CreateDatabaseUser("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)

Verwandte Themen