Datenbankbenutzer erstellen (Data Management)
Zusammenfassung
Mit dem Werkzeug Datenbankbenutzer erstellen wird ein Datenbankbenutzer mit ausreichenden Berechtigungen zum Erstellen von Daten in der Datenbank erstellt.
Verwendung
-
Dieses Werkzeug kann nur mit Oracle, Microsoft SQL Server oder PostgreSQL verwendet werden. (Wird in Windows Azure SQL Database 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.
Den in der Datenbank erstellten Benutzern werden folgende Berechtigungen gewährt:
DBMS
Berechtigungen
Oracle
CREATE SESSION
CREATE SEQUENCE
CREATE TRIGGER
CREATE VIEW
CREATE TABLE
SELECT ON DBA_ROLES
PostgreSQL
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, DELETE für die Tabelle "public.geometry_columns" und SELECT für "public.spatial_ref_systable", wenn der PostGIS-Geometrietyp installiert ist
SQL Server
CREATE TABLE
CREATE PROCEDURE
CREATE VIEW
VIEW DEFINITION
Wenn die Anmeldung in der SQL Server-Instanz oder im PostgreSQL-Datenbank-Cluster nicht vorhanden ist, dann wird mit dem Werkzeug Datenbankbenutzer erstellen die Anmeldung hinzugefügt, ein Benutzer in der als Eingabedatenbank angegebenen Datenbank hinzugefügt 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 die Anmeldung bereits vorhanden ist, wird mit dem Werkzeug Datenbankbenutzer erstellen der Benutzer zur als Eingabedatenbank 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 die Anmeldung bereits vorhanden ist, wird mit dem Werkzeug Datenbankbenutzer erstellen das passende Schema in der als Eingabedatenbank 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.
Syntax
Parameter | Erläuterung | 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 als Datenbankadministrator-Benutzer eine Verbindung zur Datenbank herstellt. Verbindungen zu Oracle müssen als "sys"-Benutzer hergestellt werden. | Workspace |
user_authentication_type (optional) |
Verwenden Sie dies nur, wenn bereits ein Betriebssystem-Anmeldekonto besteht, für das Sie einen Datenbankbenutzer erstellen möchten. Nur aktiviert für SQL Server- und Oracle-Datenbanken.
| 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 muss eingehalten werden. 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 ein. | 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 |
Codebeispiel
Erstellt einen Datenbankbenutzer in Oracle und einen Standard-Tablespace für den Benutzer.
#Import arcpy module
import arcpy
CreateDatabaseUser_management("C:\Documents and Settings\user1\Application Data\ESRI\ArcCatalog\oracledb1.sde", "DB", "map", "Pam987", "sdetbs")
Erstellt einen Eingabe-Workspace und einen Datenbankbenutzer in PostgreSQL
#Import arcpy module
import arcpy
CreateDatabaseConnection_management("Database Connections", "pgconn.sde", "POSTGRESQL", myserver, mypgdb, "DATABASE_AUTH", "ela", "3L@pwd", "SAVE_USERNAME")
CreateDatabaseUser_management("C:\Documents and Settings\u5\Application Data\ESRI\ArcCatalog\pgconn.sde", "DB", "dataowner", "N0look")
Erstellt einen Datenbankbenutzer, der einem vorhandenen Betriebssystem-Anmeldekonto in SQL Server zugeordnet ist
#Import arcpy module
import arcpy
CreateDatabaseUser_management("C:\Documents and Settings\u5\Application Data\ESRI\ArcCatalog\connection_ssi.sde", "OSA", "mynet\vorhoos", "", "")
Eigenständiges Skript zum Erstellen von Datenbankbenutzern
"""
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
Author: Esri
"""
# Import system modules
import arcpy, os, optparse, 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 for Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS for 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)