Datenbankbenutzer erstellen (Data Management)

Zusammenfassung

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

Verwendung

  • Dieses Werkzeug kann nur mit Oracle, Microsoft SQL Server, PostgreSQL oder SAP HANA 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:

    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

    SAP HANA

    Das Werkzeug erstellt einen SAP HANA-Standardbenutzer.

  • 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})
ParameterErklärungDatentyp
input_database

Geben Sie die Verbindungsdatei zu einer Enterprise-Geodatabase in Oracle, PostgreSQL oder SQL Server an. Stellen Sie sicher, dass die Verbindung als Datenbank-Administratorbenutzer hergestellt wird. 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.

  • DATABASE_USERErstellt einen Benutzer mit Datenbankauthentifizierung. Dies ist die Standardeinstellung. Wenn das Datenbankmanagementsystem keine Datenbankauthentifizierung zulässt, sollten Sie diese Option nicht verwenden.
  • OPERATING_SYSTEM_USERErstellt einen Benutzer mit Betriebssystemauthentifizierung. Das entsprechende Anmeldekonto muss bereits vorhanden sein. Wenn das Datenbankmanagementsystem keine Betriebssystemauthentifizierung zulässt, sollten Sie diese Option nicht verwenden.
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

NameErklärungDatentyp
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)

Lizenzinformationen

  • Basic: Nein
  • Standard: Ja
  • Advanced: Ja

Verwandte Themen