Serveur d'impression

Comment créer un script des mappages d'utilisateurs pour les connexions Utilisateurs? – Serveur d’impression

Par Titanfall , le 16 octobre 2019 - 22 minutes de lecture

Vous ne savez pas si c'est exactement ce dont vous avez besoin, mais jetez un coup d'œil:

/ * ============================================= =============================================== ===================== * /
/ * = Documentation d'audit d'audit de sécurité d'instance = * /
/ * ============================================= =============================================== ===================== * /
/ * Date de création: 28/12/2011
 Par: VikingDBA
 Modifications:
 08/07/2012 Modifié pour faire aussi des autorisations au niveau du serveur (comme VIEW ANY DATABASE, ou VIEW SERVER STATE)
 01/09/2013 Changement pour imprimer les scripts afin de créer les instructions CREATE ROLE et CREATE USER
 31/01/2013 Modifié pour imprimer les instructions de niveau serveur et les instructions pour définir les valeurs par défaut
bases de données pour les utilisateurs
 
Dépendances:
 Ce script dépend des éléments suivants pour exister:
 aucun

 Sommaire:
 Ce script crée la documentation de toutes les bases de données d’une instance, y compris les autorisations au niveau du serveur et le rôle de la base de données.
 autorisations et autorisations individuelles des objets de base de données.

Notez que le fait de changer les ensembles @outputtype = 1 pour columnar (style de rapport) et que la valeur 2 crée les instructions d'affectation

 REMARQUE: s'exécute pour toutes les bases de données, sauf si une base de données spécifique est utilisée dans la clause WHERE ci-dessous.
 Consultez également la section Variables à définir par l'utilisateur ci-dessous pour savoir si des variables doivent être définies.
* /

Utilisez MASTER

SET NOCOUNT ON


/ * ============================================= =============================================== ================== * /
- Audit de sécurité pour les rôles de serveur
DECLARE @sr varchar (100)
DECLARE @mn varchar (150)
DECLARE @cmd varchar (4000)
DECLARE @ col1nm varchar (200)
DECLARE @ col2nm varchar (200)
DECLARE @ col3nm varchar (200)
DECLARE @ col4nm varchar (200)
DECLARE @ col5nm varchar (200)
DECLARE @ col6nm varchar (200)
DECLARE @ col7nm varchar (200)
DECLARE @ col8nm varchar (200)
DECLARE @ col9nm varchar (200)
DECLARE @ col10nm varchar (200)
DECLARE @ col11nm varchar (200)
DECLARE @ col12nm varchar (200)
DECLARE @ col13nm varchar (200)
DECLARE @ col14nm varchar (200)
DECLARE @ col15nm varchar (200)
DECLARE @ col16nm varchar (200)
DECLARE @ col17nm varchar (200)
DECLARE @ col18nm varchar (200)
DECLARE @ col19nm varchar (200)
DECLARE @ col20nm varchar (200)
DECLARE @ col1len int
DECLARE @ col2len int
DECLARE @ col3len int
DECLARE @ col4len int
DECLARE @ col5len int
DECLARE @ col6len int
DECLARE @ col7len int
DECLARE @ col8len int
DECLARE @ col9len int
DECLARE @ col10len int
DECLARE @ col11len int
DECLARE @ col12len int
DECLARE @ col13len int
DECLARE @ col14len int
DECLARE @ col15len int
DECLARE @ col16len int
DECLARE @ col17len int
DECLARE @ col18len int
DECLARE @ col19len int
DECLARE @ col20len int
DECLARE @ col1max int
DECLARE @ col2max int
DECLARE @ col3max int
DECLARE @ col4max int
DECLARE @ col5max int
DECLARE @ col6max int
DECLARE @ col7max int
DECLARE @ col8max int
DECLARE @ col9max int
DECLARE @ col10max int
DECLARE @ col11max int
DECLARE @ col12max int
DECLARE @ col13max int
DECLARE @ col14max int
DECLARE @ col15max int
DECLARE @ col16max int
DECLARE @ col17max int
DECLARE @ col18max int
DECLARE @ col19max int
DECLARE @ col20max int
DECLARE @ col1min int
DECLARE @ col2min int
DECLARE @ col3min int
DECLARE @ col4min int
DECLARE @ col5min int
DECLARE @ col6min int
DECLARE @ col7min int
DECLARE @ col8min int
DECLARE @ col9min int
DECLARE @ col10min int
DECLARE @ col11min int
DECLARE @ col12min int
DECLARE @ col13min int
DECLARE @ col14min int
DECLARE @ col15min int
DECLARE @ col16min int
DECLARE @ col17min int
DECLARE @ col18min int
DECLARE @ col19min int
DECLARE @ col20min int
DECLARE @rn varchar (200)
DECLARE @un varchar (200)
DECLARE @ut varchar (200)
DECLARE @sd varchar (200)
DECLARE @pn varchar (200)
DECLARE @sn varchar (200)
DÉCLARE @on varchar (200)
DECLARE @pd varchar (200)
DÉCLARE @sdmax int
DECLARE @pnmax int
DÉCLARE @snmax int
DÉCLARER @onmax int
DECLARE @pdmax int
DECLARE @unmax int
DECLARE @rnmax int
DÉCLARE @utmax int
DECLARE @outputtype int
DECLARE @prodlevel varchar (25)
DECLARE @version varchar (250)
DEClARE @prodver varchar (50)
DECLARE @edition varchar (50)
DÉCLARER bit @includeobjlvlperms
DECLARE @includeroleinfo bit
DECLARE @includedefaultdb bit
DECLARE @usnm varchar (128)
DÉCLARE @ustp varchar (60)
DECLARE @stdsc varchar (60)
DECLARE @permnm varchar (128)
DECLARE @collationname varchar (200)
DECLARE @lineval varchar (2000)
DECLARE @loginname varchar (100)
DECLARE @dbnametouse sysname

/ * ============================================= ============================================== * /
- Variables paramétrables par l'utilisateur
SET @outputtype = 1 - 1 = en colonne 2 = instructions d'affectation
SET @includeobjlvlperms = 1
SET @includeroleinfo = 1
SET @includedefaultdb = 1
/ * ============================================= ============================================== * /

SELECT @ prodlevel = CONVERT (varchar (25), SERVERPROPERTY ('ProductLevel'))
SELECT @ version = CONVERT (varchar (250), @@ VERSION)
SELECT @ prodver = CONVERT (varchar (50), SERVERPROPERTY ('ProductVersion'))
SELECT @ edition = CONVERT (varchar (50), SERVERPROPERTY ('Edition'))
/ * ============================================= ============================= /
--Trouver une ligne de démarcation
DECLARE @lvaltouse varchar (2000)
DECLARE @lvallength int
DECLARE @lvalct int
DECLARE @spotcat int
DECLARE @spotcatval int
DECLARE @ lval1 varchar (2000)
DECLARE @ lval2 varchar (2000)
DECLARE @ lval3 varchar (2000)
DECLARE @ lval4 varchar (2000)
DECLARE @ lval5 varchar (2000)
DECLARE @ lval6 varchar (2000)
SET @lvaltouse = @version
SET @lvallength = LEN (@lvaltouse)
SET @lvalct = 1
SET @spotcat = 1
SET @ lval1 = ''
SET @ lval2 = ''
SET @ lval3 = ''
SET @ lval4 = ''
SET @ lval5 = ''
SET @ lval6 = ''
PENDANT @spotcat <= @lvallength
 COMMENCER
 SET @spotcatval = ASCII (SUBSTRING (@ lvaltouse, @ spotcat, 1))
 if @spotcatval = 10 - valeur recherchée
 SET @lvalct = @lvalct + 1 - défini pour passer à la ligne suivante et commencer à la construire
 else - ajoute à la ligne de valeur actuelle
 COMMENCER
 if @spotcatval <> 9 - valeurs que nous voulons exclure
 COMMENCER
 si @lvalct = 1
 SET @ lval1 = @ lval1 + CHAR (@spotcatval)
 si @lvalct = 2
 SET @ lval2 = @ lval2 + CHAR (@spotcatval)
 si @lvalct = 3
 SET @ lval3 = @ lval3 + CHAR (@spotcatval)
 si @lvalct = 4
 SET @ lval4 = @ lval4 + CHAR (@spotcatval)
 si @lvalct = 5
 SET @ lval5 = @ lval5 + CHAR (@spotcatval)
 si @lvalct = 6
 SET @ lval6 = @ lval6 + CHAR (@spotcatval)
 FIN
 FIN
 SET @spotcat = @spotcat + 1
 FIN
 --PRINT 'Ligne à scinder =' + @lvaltouse
 --PRINT 'line1 =' + @ lval1
 --PRINT 'line2 =' + @ lval2
 --PRINT 'line3 =' + @ lval3
 --PRINT 'line4 =' + @ lval4
 --PRINT 'line5 =' + @ lval5
 --PRINT 'line6 =' + @ lval6
/ * ============================================= ============================== /
CREATE TABLE #dummyuserassign
(RecID int IDENTITY,
LineVal varchar (2000)
)

IMPRIMER '============================================= =============================================== =========== '
IMPRIMER 'Audit de sécurité pour instance de serveur' + CONVERT (varchar (128), @@ nomserveur)
si @outputtype = 2
 IMPRIMER 'Déclarations d'attribution'
PRINT 'For' + CONVERT (varchar (128), getdate (), 101) + '' + CONVERT (varchar (128), getdate (), 108)
IMPRIMER '============================================= =============================================== =========== '
PRINT 'Version du serveur SQL:' + @ lval1
IMPRIMER '' + @ lval4
IMPRIMER '============================================= =============================================== =========== '
PRINT 'REMARQUE: veillez à obtenir la liste des connexions à l'aide de la procédure stockée sp_help_revlogin de la base de données master.'
IMPRIMER '============================================= =============================================== =========== '
IMPRIMER 'Paramètres de sécurité du rôle serveur'
IMPRESSION ' '
IMPRESSION ' '




CREATE TABLE #rolememberdummy
(ServerRole varchar (100),
Nom du membre varchar (150),
MemberSID varchar (2000)
)
CREATE TABLE #dummyDBPerms
(StateDesc varchar (200),
 PermName varchar (200),
 SchemaName varchar (200),
 ObjectName varchar (200),
 Nom d'utilisateur varchar (200),
 ObjectType varchar (200),
 Type d'utilisateur varchar (200)
)


- Audit de sécurité
INSERT INTO #rolememberdummy
EXEC sp_helpsrvrolemember 'sysadmin'
INSERT INTO #rolememberdummy
EXEC sp_helpsrvrolemember 'securityadmin'
INSERT INTO #rolememberdummy
EXEC sp_helpsrvrolemember 'serveradmin'
INSERT INTO #rolememberdummy
EXEC sp_helpsrvrolemember 'dbcreator'
INSERT INTO #rolememberdummy
EXEC sp_helpsrvrolemember 'diskadmin'
INSERT INTO #rolememberdummy
EXEC sp_helpsrvrolemember 'processadmin'
INSERT INTO #rolememberdummy
EXEC sp_helpsrvrolemember 'setupadmin'
INSERT INTO #rolememberdummy
EXEC sp_helpsrvrolemember 'bulkadmin'



SET @ col1nm = 'Role'
SET @ col1len = 20
SET @ col2nm = ''
SET @ col2len = 8
SET @ col3nm = 'Nom du membre'
SET @ col3len = 30
IMPRIMER @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm
PRINT REPLICATE ('=', @ col1len) + ESPACE (@ col2len) + REPLICATE ('=', @ col3len)






--SELECT CONVERT (varchar (30), ServerRole) en tant que ServerRole, CONVERT (varchar (30), MemberName) AS MemberName FROM #rolememberdummy
DÉCLARER backupfiles CURSEUR POUR
SELECT ServerRole, MemberName FROM #rolememberdummy

OPEN backupFiles

- Boucle dans tous les fichiers de la base de données
FETCH NEXT FROM backupFiles INTO @sr, @mn

WHILE @@ FETCH_STATUS = 0
COMMENCER
SET @ col1nm = @sr
 SET @ col1len = 20
 SET @ col2nm = ''
 SET @ col2len = 8
 SET @ col3nm = @mn
 SET @ col3len = 30
 IMPRIMER @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm


 FETCH NEXT FROM backupFiles INTO @sr, @mn
FIN

FERMER backupFiles
DEALLOCATE backupfiles

DROP TABLE #rolememberdummy


IMPRESSION ' '
IMPRESSION ' '
IMPRIMER '============================================= =============================================== ========= '
IMPRIMER 'Autorisations au niveau du serveur'
IMPRESSION ' '
IMPRESSION ' '

CREATE TABLE #serverpermdummy
(Nom d'utilisateur varchar (128),
Type d'utilisateur varchar (60),
StateDesc varchar (60),
PermName varchar (128)
)

INSERT INTO #serverpermdummy
SELECT l.name comme nom d'utilisateur, l.type_desc AS UserType, p.state_desc AS StateDesc, p.permission_name AS PermName
FROM sys.server_permissions AS p
JOIN sys.server_principals AS l ON p.grantee_principal_id = l.principal_id
WHERE ((nom_autorisation <> 'CONNECT SQL' ET nom_autorisation <> 'CONNECT') OU p.state_desc = 'DENY') ET l.type_desc <> 'CERTIFICATE_MAPPED_LOGIN' ET l.nom NE PAS LIKE '% # MS_%'
ORDER BY l.principal_id

--SELECT * FROM sys.server_principals

SET @ col1nm = 'Nom d'utilisateur'
SET @ col1len = 20
SET @ col2nm = ''
SET @ col2len = 8
SET @ col3nm = 'Type d'utilisateur'
SET @ col3len = 20
SET @ col4nm = ''
SET @ col4len = 8
SET @ col5nm = 'State Desc'
SET @ col5len = 20
SET @ col6nm = ''
SET @ col6len = 8
SET @ col7nm = 'Permission'
SET @ col7len = 30

SET @ col1min = LEN (@ col1nm)
SET @ col3min = LEN (@ col3nm)
SET @ col5min = LEN (@ col5nm)
SET @ col7min = LEN (@ col7nm)

--Obtenir la longueur de la plus longue occurrence des colonnes
SELECT @ col1max = ISNULL (MAX (len (LTRIM (RTRIM (UserName)))), 0) FROM #serverpermdummy
SELECT @ col3max = ISNULL (MAX (len (LTRIM (RTRIM (UserType)))), 0) FROM #serverpermdummy
SELECT @ col5max = ISNULL (MAX (len (LTRIM (RTRIM (StateDesc)))), 0) FROM #serverpermdummy
SELECT @ col7max = ISNULL (MAX (len (LTRIM (RTRIM (PermName)))), 0) FROM #serverpermdummy


- Définissez des valeurs minimales pour que la colonne ne s'imprime pas rapidement
if @ col1max <@ col1min SET @ col1len = @ col1min sinon SET @ col1len = @ col1max
si @ col3max <@ col3min SET @ col3len = @ col3min sinon SET @ col3len = @ col3max
si @ col5max <@ col5min SET @ col5len = @ col5min sinon SET @ col5len = @ col5max
si @ col7max <@ col7min SET @ col7len = @ col7min sinon SET @ col7len = @ col7max

si @outputtype = 1
 COMMENCER
 IMPRIMER @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm + ESPACE (@ col3len-len (@ col3nm)) + ESPACE (@ col4len) + @ col5nm + ESPACE (@ col5len -len (@ col5nm)) + ESPACE (@ col6len) + @ col7nm + ESPACE (@ col7len-len (@ col7nm))
 PRINT REPLICATE ('=', @ col1len) + ESPACE (@ col2len) + REPLICATE ('=', @ col3len) + SPACE (@ col4len) + REPLICAT ('=', @ col5len) + SPACE (@ col6len) + REPLICATE ('=', @ col7len)
 FIN
autre
 si EXISTS (SELECT ISNULL (UserName, '') AS UserName, ISNULL (UserType, '') AS UserType, ISNULL (StateDesc, '') AS StateDesc, ISNULL (PermName, '') AS PermName FROM nom_serveurpermdummy)
 IMPRIMER 'UTILISER le maître;'


DÉCLARER backupfiles CURSEUR POUR
SELECT ISNULL (UserName, '') AS UserName, ISNULL (UserType, '') AS UserType, ISNULL (StateDesc, '') AS StateDesc, ISNULL (PermName, '') AS PermName FROM #serverpermdummy

OPEN backupFiles

- Boucle dans tous les fichiers de la base de données
FETCH NEXT FROM backupFiles INTO @usnm, @ustp, @stdsc, @permnm


WHILE @@ FETCH_STATUS = 0
COMMENCER
SET @ col1nm = @usnm
 SET @ col2nm = ''
 SET @ col3nm = @ustp
 SET @ col4nm = ''
 SET @ col5nm = @stdsc
 SET @ col6nm = ''
 SET @ col7nm = @permnm
 si @outputtype = 1
 IMPRIMER @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm + ESPACE (@ col3len-len (@ col3nm)) + ESPACE (@ col4len) + @ col5nm + ESPACE (@ col5len -len (@ col5nm)) + ESPACE (@ col6len) + @ col7nm + ESPACE (@ col7len-len (@ col7nm))
 autre
 PRINT @stdsc + '' + @permnm + 'TO' + @usnm + ';'


 FETCH NEXT FROM backupFiles INTO @usnm, @ustp, @stdsc, @permnm
FIN

FERMER backupFiles
DEALLOCATE backupfiles


DROP TABLE #serverpermdummy

IMPRESSION ' '
IMPRESSION ' '
IMPRIMER '============================================= =============================================== ========= '
IMPRIMER 'Information par base de données'
IMPRESSION ' '
IMPRESSION ' '

CREATE TABLE #DummyDBDesc
(RecID int IDENTITY NOT NULL,
 NomServeur varchar (128) NULL,
 DBName varchar (100) NULL,
 Modèle de restauration varchar (10) NULL,
 CompatibilityLevel varchar (30) NULL,
 ReadWriteDesc varchar (10) NULL
)
CREATE TABLE #dummyDBRoles
(RoleName varchar (200),
 Nom d'utilisateur varchar (200),
 Type d'utilisateur varchar (200)
)

CREATE TABLE #dummyrolelist
(Nom de rôle varchar (200)
)

CREATE TABLE #dummyDBUsers
(Nom d'utilisateur varchar (200),
 Type d'utilisateur varchar (200)
)
INSERT INTO #DummyDBDesc
sélectionnez CONVERT (varchar (128), @@ nom_serveur) AS ServerName, CONVERT (varchar (100), nom) en tant que DBName, CONVERT (varchar (10), recovery_model_desc) en tant que RecoveryModel, --database Base,
CASE niveau_compatibilité
WHEN 80 THEN CONVERT (varchar (4), niveau_compatibilité) + '- SQL 2000 *'
WHEN 90 THEN CONVERT (varchar (4), niveau_compatibilité) + '- SQL 2005'
WHEN 100 THEN CONVERT (varchar (4), niveau_compatibilité) + '- SQL 2008'
WHEN 105 THEN CONVERT (varchar (4), niveau_compatibilité) + '- SQL 2008 R2'
WHEN 110 THEN CONVERT (varchar (4), niveau_compatibilité) + '- SQL 2012'
ELSE CONVERT (varchar (4), niveau_compatibilité)
END AS CompatibilityLevel,
CASE is_read_only
QUAND 0 ALORS CONVERTIR (varchar (10), 'RW')
ELSE CONVERT (varchar (10), 'R')
FIN comme ReadWriteDesc
FROM sys.databases
WHERE nom NOT IN ('tempdb', 'master', 'msdb', 'model') et nom NOT LIKE '% ReportServer%' AND state = 0
--AND name = 'MyDatabase'
ORDRE PAR NOM


DÉCLARER backupfiles CURSEUR POUR
 SELECT DBName, RecoveryModel, CompatibilityLevel, ReadWriteDesc FROM #DummyDBDesc ORDER BY DBName
OPEN backupFiles

DECLARE @dbn varchar (100)
DECLARE @rm varchar (10)
DECLARE @cl varchar (30)
DECLARE @rwd varchar (10)


- Boucle dans tous les fichiers de la base de données
FETCH NEXT FROM backupFiles INTO @dbn, @rm, @cl, @rwd

WHILE @@ FETCH_STATUS = 0
COMMENCER

IMPRIMER 'Nom de la base de données:' + @dbn
 PRINT 'Modèle de récupération:' + @rm
 PRINT 'Niveau de compatibilité:' + @cl
 IMPRIMER 'Lecture / Ecriture:' + @rwd
 IMPRESSION ' '
 IMPRESSION ' '
 

/ * ============================================= =============================================== =============================================== ============= * /
 / * Informations sur l'utilisateur de la base de données * /
 
--Démarrez avec une table vierge pour charger les valeurs
 TRUNCATE TABLE #dummyDBUsers

 - Obtenez les rôles pour cette base de données et chargez-les dans la table temporaire
 SET @cmd = 'USE [' + @dbn + ']; INSERT INTO #dummyDBUsers SELECT CONVERT (varchar (100), nom) AS UserName, CONVERT (varchar (100), type_desc) en tant que UserType FROM sys.database_principals WHERE (type = '' '' 'OU type =' '' '' OU type = '' G '') AND is_fixed_role = 0 AND (nom NOT IN ('' guest '', '' dbo '', '' INFORMATION_SCHEMA '', '' sys ''))
 --PRINT @cmd
 EXEC (@cmd)

--Obtenir la longueur de la plus longue occurrence des colonnes
 SELECT @unmax = ISNULL (MAX (len (UserName)), 0) FROM #dummyDBUsers
 SELECT @utmax = ISNULL (MAX (len (UserType)), 0) FROM #dummyDBUsers

 - Définissez des valeurs minimales pour que la colonne ne s'imprime pas rapidement
 si @unmax <25 SET @unmax = 25
 si @utmax <25 SET @utmax = 25
 
--Définissez et imprimez les en-têtes de colonne pour les informations de rôle.
 SET @ col1nm = 'Nom d'utilisateur'
 SET @ col1len = @unmax
 SET @ col2nm = ''
 SET @ col2len = 5
 SET @ col3nm = 'UserType'
 SET @ col3len = @utmax
 IMPRESSION ' '
 ESPACE D'IMPRESSION (10) + @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm + ESPACE (@ col3len-len (@ col3nm))
ESPACE D'IMPRESSION (10) + REPLIQUE ('=', @ col1len) + ESPACE (@ col2len) + REPLIQUE ('=', @ col3len)

 DÉCLARER backupFiles2 CURSOR FOR
SELECT UserName, UserType FROM #dummyDBUsers ORDER BY UserName

 OPEN backupFiles2

- Boucle dans tous les fichiers de la base de données
FETCH NEXT FROM backupFiles2 INTO @un, @ut

 WHILE @@ FETCH_STATUS = 0
COMMENCER
--Définissez et imprimez les détails de la ligne pour les informations de rôle.
 SET @ col1nm = SUBSTRING (@ un, 1, @ unmax)
 SET @ col3nm = SUBSTRING (@ ut, 1, @ utmax)

 ESPACE D'IMPRESSION (10) + @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm + ESPACE (@ col3len-len (@ col3nm))

FETCH NEXT FROM backupFiles2 INTO @un, @ut
 FIN

FERMER backupFiles2
DEALLOCATE backupFiles2
 
IMPRESSION ' '
 IMPRESSION ' '
 
if @outputtype = 2 - crée les instructions pour affecter un utilisateur à cette base de données
 COMMENCER
 TRUNCATE TABLE #dummyuserassign

 SET @cmd = 'USE [' + @dbn + ']; INSERT INTO #dummyuserassign select DISTINCT
 CASE members.type_desc
QUAND '' WINDOWS_USER ''
ALORS '' CREATE USER [''+ members.name + ''] POUR CONNEXION [''+ members.name+ '']'' + '' WITH DEFAULT_SCHEMA =['' + members.default_schema_name + '']''
QUAND '' SQL_USER ''
 ALORS '' CREATE USER [''+ members.name + ''] POUR CONNEXION [''+ members.name+ '']'' + '' WITH DEFAULT_SCHEMA =['' + members.default_schema_name + '']''
 END AS CreateUser
 à partir de membres sys.database_principals
 jointure interne sys.database_role_members drm
 sur members.principal_id = drm.member_principal_id
 rejoindre des rôles sys.database_principals
 sur drm.role_principal_id = roles.principal_id
 où membres.nom <> '' dbo ''
 ORDER BY CreateUser '
 --PRINT @cmd
 EXEC (@cmd)


si existe (SELECT * FROM #dummyuserassign)
 COMMENCER
 IMPRIMER 'UTILISATION' + @dbn
 IMPRIMEZ 'GO'
 IMPRESSION ' '
 FIN
 DÉCLARER myCursorVariable3 CURSOR FOR
SELECT LineVal FROM #dummyuserassign ORDER BY RecID

 OUVRIR myCursorVariable3

- Boucle dans tous les fichiers de la base de données
FETCH NEXT FROM myCursorVariable3 INTO @lineval

 WHILE @@ FETCH_STATUS = 0
COMMENCER
IMPRIMER @lineval

 FETCH NEXT FROM myCursorVariable3 INTO @lineval
 FIN

FERMER myCursorVariable3
DEALLOCATE myCursorVariable3
FIN
 


si @includeroleinfo = 1
 COMMENCER
 / * ============================================= =============================================== =============================================== ============= * /
 / * Informations sur le rôle * /
 SELECT @collationname = nom_collection FROM master.sys.databases WHERE nom = @dbn
 si @collationname EST NULL
 print 'null for' + @dbn

 si @collationname EST NULL
 SET @collationname = (SELECT nom_collection FROM maître.sys.databases WHERE nom = 'maître')

 SET @cmd = 'ALTER TABLE #dummyrolelist ALTER COLUMN Nom du rôle varchar (200) COLLATE' + @collationname + 'NULL'
 EXEC (@cmd)
SET @cmd = 'ALTER TABLE #dummyDBRoles ALTER COLUMN RoleName varchar (200) COLLATE' + @collationname + 'NULL'
 EXEC (@cmd)
SET @cmd = 'ALTER TABLE #dummyDBRoles ALTER COLUMN Nom d'utilisateur varchar (200) COLLATE' + @collationname + 'NULL'
 EXEC (@cmd)
SET @cmd = 'ALTER TABLE #dummyDBRoles ALTER COLUMN Type d'utilisateur varchar (200) COLLATE' + @collationname + 'NULL'
 EXEC (@cmd)

--Démarrez avec une table vierge pour charger les valeurs
 TRUNCATE TABLE #dummyDBRoles

 - Obtenez les rôles pour cette base de données et chargez-les dans la table temporaire
 SET @cmd = 'USE [' + @dbn + ']; INSERT INTO #dummyDBRoles sélectionnez CONVERT (varchar (200), roles.name) en tant que NomRôle, CONVERT (varchar (200), members.name) AS NomUtilisateur, CONVERT (varchar (200), members.type_desc) AS UserType de sys.database_principals membres internes rejoindre sys.database_role_members drm sur members.principal_id = drm.member_principal_id rejoindre interne sys.database_principals rôles sur drm.role_principal_id = roles.principal_id où members.name <> '' '' dbo '', ORDER BY membres
 --PRINT @cmd
 EXEC (@cmd)

- Ajoutez maintenant les rôles présents dans la base de données auxquels aucune personne ne leur a été affectée (ceux déjà présents dans la table temporaire)
 SET @cmd = 'USE [' + @dbn + ']; INSERT INTO #dummyDBRoles SELECT CONVERT (varchar (200), nom) AS NameName, '' --none-- '' As UserName, '' '' AS UserType FROM sys.database_principals WHERE type = '' R '' et is_fixed_role = 0 et nom <> '' public '' AND (nom NOT IN (SELECT NomRôle FROM #dummyDBRoles)) '
 --PRINT @cmd
 EXEC (@cmd)

- obtenez maintenant une liste des rôles de base de données créés et imprimez-les sous forme d'instructions CREATE ROLE
 si @outputtype = 2
 COMMENCER
 TRUNCATE TABLE #dummyrolelist
 SET @cmd = 'USE [' + @dbn + ']; INSERT INTO #dummyrolelist SELECT nom FROM sys.database_principals WHERE type = '' R '' AND nom <> '' public '' AND is_fixed_role = 0 '
 --PRINT @cmd
 EXEC (@cmd)
IMPRIMER 'UTILISATION' + @dbn
 IMPRIMEZ 'GO'
 IMPRESSION ' '
 DÉCLARER myCursorVariable4 CURSOR FOR
SELECT NomRôle FROM #dummyrolelist

OUVRIR myCursorVariable4

 - Boucle dans tous les fichiers de la base de données
FETCH NEXT FROM myCursorVariable4 INTO @rn

 WHILE @@ FETCH_STATUS = 0
COMMENCER
SET @cmd = 'CREATE ROLE' + @rn
 IMPRIMER @cmd


FETCH NEXT FROM myCursorVariable4 INTO @rn
 FIN

FERMER myCursorVariable4
 DEALLOCATE myCursorVariable4
 FIN

 --Obtenir la longueur de la plus longue occurrence des colonnes
 SELECT @rnmax = ISNULL (MAX (len (Nom du rôle)), 0) FROM #dummyDBRoles
 SELECT @unmax = ISNULL (MAX (len (UserName)), 0) FROM #dummyDBRoles
 SELECT @utmax = ISNULL (MAX (len (UserType)), 0) FROM #dummyDBRoles

 - Définissez des valeurs minimales pour que la colonne ne s'imprime pas rapidement
 si @rnmax <25 SET @rnmax = 25
 si @unmax <25 SET @unmax = 25
 si @utmax <25 SET @utmax = 25

 --Définissez et imprimez les en-têtes de colonne pour les informations de rôle
 SET @ col1nm = 'NomRôle'
 SET @ col1len = @rnmax
 SET @ col2nm = ''
 SET @ col2len = 5
 SET @ col3nm = 'Nom d'utilisateur'
 SET @ col3len = @unmax
 SET @ col4nm = ''
 SET @ col4len = 5
 SET @ col5nm = 'UserType'
 SET @ col5len = @utmax
 IMPRESSION ' '
 ESPACE D'IMPRESSION (10) + @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm + ESPACE (@ col3len-len (@ col3nm)) + ESPACE (@ col4len) + @ col5nm + ESPACE (@ col5len-len (@ col5nm))
ESPACE D'IMPRESSION (10) + REPLIQUÉ ('=', @ col1len) + ESPACE (@ col2len) + REPLICAT ('=', @ col3len) + ESPACE (@ col4len) + REPLICAT ('=', @ col5len)

 - Imprimez le script pour définir le contexte de la base de données
 si @outputtype = 2
 COMMENCER
 IMPRIMER 'UTILISATION' + @dbn
 IMPRIMEZ 'GO'
 IMPRESSION ' '
 FIN

 --statement pour obtenir tous les rôles pour cette base de données
 --SELECT nom FROM sys.database_principals WHERE type = 'R' et is_fixed_role = 0 et nom <> 'public'
 --peut utiliser le script des instructions CREATE ROLE

 - Maintenant, parcourez les rôles
 DÉCLARER backupFiles2 CURSOR FOR
SELECT Nom de rôle, Nom d'utilisateur, Type d'utilisateur FROM #dummyDBRoles ORDER BY Nom de rôle

 OPEN backupFiles2

- Boucle dans tous les fichiers de la base de données
FETCH NEXT FROM backupFiles2 INTO @rn, @un, @ut

WHILE @@ FETCH_STATUS = 0
COMMENCER
--Définissez et imprimez les détails de la ligne pour les informations de rôle.
 SET @ col1nm = SUBSTRING (@ rn, 1, @ rnmax)
 SET @ col3nm = SUBSTRING (@ un, 1, @ unmax)
 SET @ col5nm = SUBSTRING (@ ut, 1, @ utmax)
 si @outputtype = 1
 ESPACE D'IMPRESSION (10) + @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm + ESPACE (@ col3len-len (@ col3nm)) + ESPACE (@ col4len) + @ col5nm + ESPACE (@ col5len-len (@ col5nm))
si @outputtype = 2
 COMMENCER
 if @ col3nm <> '--none--'
 PRINT 'exec sp_addrolemember [' + @col1nm + '], [' + @col3nm + '] --Usertype = '+ @ col5nm
 autre
 ESPACE D'IMPRESSION (10) + @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm + ESPACE (@ col3len-len (@ col3nm)) + ESPACE (@ col4len) + @ col5nm + ESPACE (@ col5len-len (@ col5nm))
 FIN

 FETCH NEXT FROM backupFiles2 INTO @rn, @un, @ut
FIN

FERMER backupFiles2
DEALLOCATE backupFiles2

 IMPRESSION ' '
 IMPRESSION ' '
 FIN

 
si @includeobjlvlperms = 1
 COMMENCER
 / * ============================================= =============================================== =============================================== ============= * /
 / * Informations sur les autorisations de niveau objet * /
 --Démarrez avec une table vierge pour charger les valeurs
 TRUNCATE TABLE #dummyDBPerms

 - Obtenir les autorisations pour cette base de données et charger dans la table temporaire
 - Je suis sûr que certaines de ces pièces sont venues d'ailleurs. Mes appologies à l'initiateur.
 SET @cmd = 'USE [' + @dbn + ']; INSERT INTO #dummyDBPerms '
 SET @cmd = @cmd + 'select p.state_desc, p.permission_name, s.name, o.name, u.name, CASE o.type WHEN' 'P' 'THEN' 'SPROC' '
 QUAND '' V '' ALORS '' View ''
 QUAND '' U '' ALORS '' Table ''
 QUAND '' FN '' ALORS '' Fonction (détartreur) ''
 QUAND '' TF '' THEN '' Fonction (valeur de table) ''
 ELSE o.type_desc END AS ObjectType,
 CONVERT (varchar (200), u.type_desc) AS UserType
 de sys.database_permissions p
jointure interne sys.objects o sur p.major_id = o.object_id
jointure interne sys.schemas s sur s.schema_id = o.schema_id
jointure interne sys.database_principals u sur p.grantee_principal_id = u.principal_id
 ORDER BY o.type, o.name collate Latin1_general_CI_AS, u.name collate Latin1_general_CI_AS '
 --PRINT @cmd
 EXEC (@cmd)

--Obtenir la longueur de la plus longue occurrence de chacune des colonnes
 SELECT @sdmax = ISNULL (MAX (len (StateDesc)), 0) FROM #dummyDBPerms
 SELECT @pnmax = ISNULL (MAX (len (PermName)), 0) FROM #dummyDBPerms
 SELECT @snmax = ISNULL (MAX (len (SchemaName)), 0) FROM #dummyDBPerms
 SELECT @onmax = ISNULL (MAX (len (ObjectName)), 0) FROM #dummyDBPerms
 SELECT @unmax = ISNULL (MAX (len (UserName)), 0) FROM #dummyDBPerms
 SELECT @pdmax = ISNULL (MAX (len (ObjectType)), 0) FROM #dummyDBPerms
 SELECT @utmax = ISNULL (MAX (len (UserType)), 0) FROM #dummyDBPerms

 - Définissez des valeurs minimales pour que la colonne ne s'imprime pas rapidement
 si @sdmax <15 SET @sdmax = 15
 si @pnmax <15 SET @pnmax = 15
 si @snmax <10 SET @snmax = 10
 si @onmax <15 SET @onmax = 15
 si @unmax <15 SET @unmax = 15
 si @pdmax <15 SET @pdmax = 15 --ObjectType
 si @utmax <15 SET @utmax = 15 --UserType

 --Placez et imprimez les en-têtes de colonne pour les informations de permissions
 SET @ col1nm = 'StateDesc'
 SET @ col1len = @sdmax
 SET @ col2nm = ''
 SET @ col2len = 5
 SET @ col3nm = 'PermName'
 SET @ col3len = @pnmax
 SET @ col4nm = ''
 SET @ col4len = 5
 SET @ col5nm = 'Schema'
 SET @ col5len = @snmax
 SET @ col6nm = ''
 SET @ col6len = 5
 SET @ col7nm = 'Object'
 SET @ col7len = @onmax
 SET @ col8nm = ''
 SET @ col8len = 5
 SET @ col9nm = 'Utilisateur'
 SET @ col9len = @unmax
 SET @ col10nm = ''
 SET @ col10len = 5
 SET @ col11nm = 'ObjectType'
 SET @ col11len = @pdmax
 SET @ col12nm = ''
 SET @ col12len = 5
 SET @ col13nm = 'UserType'
 SET @ col13len = @utmax

 IMPRESSION ' '
 ESPACE D'IMPRESSION (10) + @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm + ESPACE (@ col3len-len (@ col3nm)) + ESPACE (@ col4len) + @ col5nm + ESPACE (@ col5len-len (@ col5nm)) + ESPACE (@ col6len) + @ col7nm + ESPACE (@ col7len-len (@ col7nm)) + ESPACE (@ col8len) + @ col9nm + ESPACE (@ col9len-len ( @ col9nm)) + ESPACE (@ col10len) + @ col11nm + ESPACE (@ col11len-len (@ col11nm)) + ESPACE (@ col12len) + @ col13nm + ESPACE (@ col13len-len (@ col13nm))
 ESPACE D'IMPRESSION (10) + REPLIQUE ('=', @ col1len) + ESPACE (@ col2len) + REPLIQUE ('=', @ col3len) + ESPACE (@ col4len) + REPLIQUE ('=', @ col5len) + ESPACE ( @ col6len) + REPLICATE ('=', @ col7len) + SPACE (@ col8len) + REPLICATE ('=', @ col9len) + SPACE (@ col10len) + REPLICATE ('=', @ col11len) + SPACE (@ col12len ) + REPLICATE ('=', @ col13len)

 --Consultez les autorisations pour cette base de données, formatez-les et imprimez-les
 DÉCLARER backupFiles2 CURSOR FOR
SELECT StateDesc, PermName, SchemaName, ObjectName, UserName, ObjectType, UserType FROM #dummyDBPerms ORDER BY Schemaname, ObjectName, UserName

 OPEN backupFiles2

- Boucle dans tous les fichiers de la base de données
FETCH NEXT FROM backupFiles2 INTO @sd, @pn, @sn, @on, @un, @pd, @ut

 WHILE @@ FETCH_STATUS = 0
COMMENCER
--Placez et imprimez les détails de la ligne pour les informations sur les autorisations
 SET @ col1nm = SUBSTRING (@ sd, 1, @ sdmax)
 SET @ col3nm = SUBSTRING (@ pn, 1, @ pnmax)
 SET @ col5nm = SUBSTRING (@ sn, 1, @ snmax)
 SET @ col7nm = SUBSTRING (@ on, 1, @ onmax)
 SET @ col9nm = SUBSTRING (@ un, 1, @ unmax)
 SET @ col11nm = SUBSTRING (@ pd, 1, @ pdmax)
 SET @ col13nm = SUBSTRING (@ ut, 1, @ utmax)

 --imprime l'enregistrement de détail pour les permissions
 si @outputtype = 1
 ESPACE D'IMPRESSION (10) + @ col1nm + ESPACE (@ col1len-len (@ col1nm)) + ESPACE (@ col2len) + @ col3nm + ESPACE (@ col3len-len (@ col3nm)) + ESPACE (@ col4len) + @ col5nm + ESPACE (@ col5len-len (@ col5nm)) + ESPACE (@ col6len) + @ col7nm + ESPACE (@ col7len-len (@ col7nm)) + ESPACE (@ col8len) + @ col9nm + ESPACE (@ col9len-len ( @ col9nm)) + ESPACE (@ col10len) + @ col11nm + ESPACE (@ col11len-len (@ col11nm)) + ESPACE (@ col12len) + @ col13nm + ESPACE (@ col13len-len (@ col13nm))
 si @outputtype = 2
 PRINT @ col1nm + '' + @ col3nm + 'ON [' + @col5nm + '].[' + @col7nm + '] À [' + @col9nm + '] --ObjectType = '+ @ col11nm +' UserType = '+ @ col13nm


 FETCH NEXT FROM backupFiles2 INTO @sd, @pn, @sn, @on, @un, @ pd, @ ut
 FIN

FERMER backupFiles2
DEALLOCATE backupFiles2

 IMPRESSION ' '
 IMPRESSION ' '

 FIN


 si @outputtype = 2 ET @includedefaultdb = 1
 COMMENCER
 if EXISTS (nom SELECT de master.sys.server_Principals WHERE, saisissez ('G', 'S', 'U') ET default_database_name = @dbn)
 COMMENCER
 IMPRESSION ' '
 IMPRESSION ' '
 PRINT '- Voici les noms d'utilisateur et leurs paramètres de base de données par défaut'
 IMPRESSION ' '

 DÉCLARER CURSEUR myCursorVariable pour
SELECT nom, default_database_name comme DefaultDB
FROM master.sys.server_Principals
WHERE saisissez ('G', 'S', 'U') ET default_database_name = @dbn
 ORDRE PAR NOM

 OPEN myCursorVariable

- Boucle dans tous les fichiers de la base de données
FETCH NEXT FROM myCursorVariable INTO @loginname, @dbnametouse

 WHILE @@ FETCH_STATUS = 0
COMMENCER
IMPRIMER 'ALTER LOGIN [' + @loginname + '] WITH DEFAULT_DATABASE = '+ @dbnametouse

 FETCH NEXT FROM myCursorVariable INTO @loginname, @dbnametouse
 FIN

FERMER myCursorVariable
DEALLOCATE myCursorVariable

IMPRESSION ' '
 IMPRESSION ' '
 FIN
 FIN




IMPRIMER '============================================= =============================================== ========= '
 
--Obtenir le prochain nom de base de données et informations à utiliser dans la boucle de base de données
 FETCH NEXT FROM backupFiles INTO @dbn, @rm, @cl, @rwd
FIN

FERMER backupFiles
DEALLOCATE backupfiles

/ * ============================================= ============================================== /
--Dispose des tables temporaires
DROP TABLE #DummyDBDesc
DROP TABLE #dummyDBRoles
DROP TABLE #dummyDBUsers
DROP TABLE #dummyDBPerms
DROP TABLE #dummyuserassign
DROP TABLE #dummyrolelist

RÉGLER NOCOUNT 

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.