Résumé
Crée un utilisateur de base de données avec des privilèges suffisants pour créer des données dans la base de données.
Utilisation
Cet outil peut être utilisé uniquement avec Oracle, Microsoft SQL Server, PostgreSQL ou SAP HANA. Cet outil n’est pas pris en charge avec les services de base de données basés sur le cloud.
Pour Oracle et SQL Server, si un identifiant de système d’exploitation existe déjà, l’outil Créer un utilisateur de base de données peut ajouter cet identifiant en tant qu’utilisateur à la base de données spécifiée.
Vous ne pouvez pas créer un utilisateur de base de données pour un groupe Microsoft Windows.
Cet outil crée des tables de fichiers journaux partagés pour l’utilisateur lorsqu’il s’exécute sur une géodatabase sur Oracle.
Les utilisateurs créés dans la base de donnée doivent se voir attribuer les privilèges suivants :
SGBD Privilèges Oracle
CREATE PROCEDURE
CREATE SESSION
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
SELECT ON DBA_ROLES
PostgreSQL
CONNECT
TEMPORARY
Les privilèges d'utilisation (USAGE) sur la structure sde si l'utilisateur est créé dans une géodatabase ou une base de donné ayant le type ST_Geometry installé
SELECT, INSERT, UPDATE et DELETE dans les vues geometry_columns et geography_columns, et SELECT dans la vue spatial_ref_sys si PostGIS est installé dans la base de données
SQL Server
CREATE TABLE
CREATE PROCEDURE
CREATE VIEW
SAP HANA
L’outil crée un utilisateur standard SAP HANA.
Si l’identifiant n’existe pas dans l’instance SQL Server ou la grappe de bases de données PostgreSQL, l’outil Créer un utilisateur de base de données ajoute l’identifiant, crée un utilisateur dans la base de données spécifiée pour le paramètre Input Database Connection (Connexion à la géodatabase en entrée), puis crée une structure pour l’utilisateur dans la base de données. La base de données spécifiée est définie comme la base de données par défaut de l’utilisateur dans SQL Server.
Si l’identifiant existe dans l’instance SQL Server, l’outil Créer un utilisateur de base de données ajoute l’utilisateur à la base de données spécifiée pour le paramètre Input Database Connection (Connexion à la géodatabase en entrée) et crée une structure correspondante. La base de données par défaut de l’utilisateur n’est pas modifiée dans SQL Server.
Si l’identifiant existe dans la grappe de bases de données PostgreSQL, l’outil Créer un utilisateur de base de données crée une structure correspondante dans la base de données spécifiée pour le paramètre Input Database Connection (Connexion à la géodatabase en entrée).
Vous ne pouvez pas créer d'utilisateur nommé ArcSDE avec cet outil. L'utilisateur ArcSDE est un utilisateur administrateur de géodatabase qui nécessite plus de privilèges que ceux que l'outil Créer un utilisateur de base de données accorde.
Vous ne pouvez pas utiliser de délimiteurs, tels que les guillemets doubles, pour spécifier un nom d’utilisateur. Lorsqu'il est fourni sans délimiteurs, le nom d'utilisateur ne peut contenir que des caractères pris en charge par le système de gestion de base de données sous-jacent.
Syntaxe
arcpy.management.CreateDatabaseUser(input_database, {user_authentication_type}, user_name, {user_password}, {role}, {tablespace_name})
Paramètre | Explication | Type de données |
input_database | Fichier de connexion à une géodatabase d’entreprise dans Oracle, PostgreSQL ou SQL Server. Veillez à ce que la connexion s’établisse en tant qu’administrateur de base de données. Lorsque vous vous connectez à Oracle, vous devez vous connecter en tant qu’utilisateur sys. | Workspace |
user_authentication_type (Facultatif) | Spécifie le type d’authentification pour l’utilisateur. Si vous spécifiez OPERATING_SYSTEM_USER, un identifiant de système d’exploitation doit déjà exister pour l’utilisateur que vous voulez créer. Les utilisateurs de système d’exploitation sont uniquement pris en charge pour les bases de données SQL Server et Oracle.
| Boolean |
user_name | Nom du nouvel utilisateur de base de données. Si vous décidez de créer un utilisateur de base de données pour un identifiant de système d'exploitation, le nom d'utilisateur doit correspondre à l'identifiant. | String |
user_password (Facultatif) | Mot de passe du nouvel utilisateur. La règle de mot de passe de la base de données sous-jacente est appliquée. Si vous décidez de créer un utilisateur de base de données pour un identifiant de système d'exploitation, aucune entrée n'est nécessaire. | Encrypted String |
role (Facultatif) | Pour ajouter le nouvel utilisateur à un rôle de base de données existant, spécifiez le nom de ce rôle. | String |
tablespace_name (Facultatif) | Lorsque vous créez un utilisateur dans une base de données Oracle, saisissez le nom du tablespace à utiliser comme tablespace par défaut pour l’utilisateur. Vous pouvez spécifier un tablespace préconfiguré ou, si le tablespace n’existe pas déjà, il est créé dans l’emplacement de stockage par défaut d’Oracle, avec une taille définie sur 400 Mo. Si aucun tablespace n’est spécifié, le tablespace par défaut de l’utilisateur est défini sur le tablespace par défaut d’Oracle. | String |
Sortie dérivée
Nom | Explication | Type de données |
out_result | Indique si l’outil s’est exécuté avec succès. | Booléen |
Exemple de code
L’exemple de script utilise un fichier de connexion à une base de données prédéfini (oracledb1.sde) pour créer un utilisateur de base de données dans Oracle et crée un tablespace (sdetbs) par défaut pour cet utilisateur.
import arcpy
arcpy.CreateDatabaseUser_management("C:/myconnections/oracledb1.sde",
"DATABASE_USER", "map", "Pam987", "sdetbs")
L’exemple de script crée un espace de travail en entrée (pgconn.sde) dans un dossier nommé connections et crée un rôle de connexion à une base de données et une structure dans 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")
L’exemple de script crée un utilisateur de base de données apparié à un identifiant de système d’exploitation existant (mynet\vorhoos) dans SQL Server et utilise un fichier de connexion à une base de données prédéfini (connection_ssi.sde).
import arcpy
arcpy.CreateDatabaseUser_management("C:/gdbconnections/connection_ssi.sde",
"OPERATING_SYSTEM_USER", "mynet\\vorhoos")
Le script autonome suivant vous permet de fournir des informations spécifiques à votre site à l’aide des options de création d’un utilisateur de base de données.
"""
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)
Environnements
Informations de licence
- Basic: Non
- Standard: Oui
- Advanced: Oui
Rubriques connexes
Vous avez un commentaire à formuler concernant cette rubrique ?