Créer un utilisateur de base de données (Gestion des données)

Synthèse

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é avec Oracle, Microsoft SQL Server ou PostgreSQL. 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à, cet outil peut l’ajouter en tant qu’utilisateur à la base de données spécifiée, mais le nom et le nom d’utilisateur de l’identifiant doivent être identiques.

  • Vous ne pouvez pas créer d'utilisateur de base de données pour un groupe Microsoft Windows.

  • Cet outil crée des tables de fichiers journaux pour l’utilisateur lorsqu’il s’exécute sur une géodatabase dans Oracle.

  • Si l’identifiant n’existe pas dans l’instance SQL Server ou le regroupement de bases de données PostgreSQL, cet outil l’ajoute, crée un utilisateur dans la base de données fournie en tant que valeur du paramètre Connexion à la base de données en entrée, puis crée une structure pour l’utilisateur dans la base de données. La base de données fournie 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, cet outil ajoute l’utilisateur à la base de données fournie en tant que valeur du paramètre Connexion à la base de données 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 le regroupement de bases de données PostgreSQL, cet outil crée une structure correspondante dans la base de données fournie en tant que valeur du paramètre Connexion à la base de données en entrée.

  • Vous ne pouvez pas créer d'utilisateur nommé ArcSDE avec cet outil. L’utilisateur SDE est l’administrateur de géodatabase ; il requiert davantge de privilèges que ceux accordés par cet outil.

  • 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.

  • Les utilisateurs créés dans la base de donnée doivent se voir attribuer les privilèges suivants :

    SGBDPrivilè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

Paramètres

ÉtiquetteExplicationType de données
Connexion à la géodatabase en entrée

Fichier de connexion à une base de données Oracle, PostgreSQL ou SQL Server ou à une géodatabase d’entreprise dans ces bases de données. Assurez-vous que la connexion est établie en tant qu’utilisateur doté de privilèges permettant de créer des utilisateurs dans la base de données. Lorsque vous vous connectez à Oracle, vous devez vous connecter en tant qu’utilisateur sys.

Workspace
Créer un utilisateur authentifié par le système d'exploitation
(Facultatif)

Spécifie le type d’authentification pour l’utilisateur. Utilisez ce paramètre uniquement s’il existe un identifiant de système d’exploitation pour lequel vous voulez créer un utilisateur de base de données. Ce paramètre n’est pris en charge que pour les bases de données SQL Server et Oracle.

  • Activé : un utilisateur authentifié par le système d’exploitation est créé. L'identifiant existant doit déjà exister.
  • Désactivé : un utilisateur authentifié par la base de données est créé. Il s’agit de l’option par défaut.
Boolean
Utilisateur de base de données

Nom du nouvel utilisateur de base de données.

Si vous créez un utilisateur de base de données pour un identifiant de système d’exploitation, le nom d’utilisateur et l’identifiant doivent être identiques.

String
Mot de passe de l'utilisateur de base de données
(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 créez un utilisateur de base de données pour un identifiant de système d’exploitation, aucune entrée n’est nécessaire.

Encrypted String
Rôle
(Facultatif)

Nom du rôle de base de données existant auquel le nouvel utilisateur est ajouté.

String
Nom de l’espace de table
(Facultatif)

Nom de l'espace de table utilisé comme espace de table par défaut pour le nouvel utilisateur dans une base de données Oracle. Vous pouvez spécifier un espace de table préconfiguré ou, si l'espace de table n’existe pas déjà, il est créé dans l’emplacement de stockage par défaut de 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 Oracle.

String

Sortie obtenue

ÉtiquetteExplicationType de données
Utilisateur de base de données créé

Indique si l’outil s’est exécuté avec succès.

Boolean

arcpy.management.CreateDatabaseUser(input_database, {user_authentication_type}, user_name, {user_password}, {role}, {tablespace_name})
NomExplicationType de données
input_database

Fichier de connexion à une base de données Oracle, PostgreSQL ou SQL Server ou à une géodatabase d’entreprise dans ces bases de données. Assurez-vous que la connexion est établie en tant qu’utilisateur doté de privilèges permettant de créer des utilisateurs dans la 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 créez. Les utilisateurs de système d’exploitation sont uniquement pris en charge pour les bases de données SQL Server et Oracle.

  • DATABASE_USERUn utilisateur authentifié par la base de données est créé. Il s’agit de l’option par défaut.Si votre système de gestion de base de données n'est pas configuré de manière à permettre l'authentification de base de données, n'utilisez pas cette option.
  • OPERATING_SYSTEM_USERUn utilisateur authentifié par le système d’exploitation est créé. L'identifiant existant doit déjà exister.Si votre système de gestion de base de données n'est pas configuré de manière à permettre l'authentification du système d'exploitation, n'utilisez pas cette option.
Boolean
user_name

Nom du nouvel utilisateur de base de données.

Si vous créez un utilisateur de base de données pour un identifiant de système d’exploitation, le nom d’utilisateur et l’identifiant doivent être identiques.

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 créez 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)

Nom du rôle de base de données existant auquel le nouvel utilisateur est ajouté.

String
tablespace_name
(Facultatif)

Nom de l'espace de table utilisé comme espace de table par défaut pour le nouvel utilisateur dans une base de données Oracle. Vous pouvez spécifier un espace de table préconfiguré ou, si l'espace de table n’existe pas déjà, il est créé dans l’emplacement de stockage par défaut de 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 Oracle.

String

Sortie obtenue

NomExplicationType de données
out_result

Indique si l’outil s’est exécuté avec succès.

Boolean

Exemple de code

Exemple 1 d’utilisation de l’outil CreateDatabaseUser (fenêtre Python)

Cet 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 espace de table (sdetbs) par défaut pour cet utilisateur.

import arcpy
arcpy.management.CreateDatabaseUser("C:/myconnections/oracledb1.sde", 
                                    "DATABASE_USER", "map", "Pam987", "sdetbs")
Exemple 2 d’utilisation de l’outil CreateDatabaseUser (fenêtre Python)

Cet 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.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")
Exemple 3 d’utilisation de l’outil CreateDatabaseUser (fenêtre Python)

Cet 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.management.CreateDatabaseUser("C:/gdbconnections/connection_ssi.sde", 
                                    "OPERATING_SYSTEM_USER", "mynet\\vorhoos")
Exemple 4 d’utilisation de l’outil CreateDatabaseUser (script autonome)

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)

Rubriques connexes