Serveur d'impression
Comment créer un script des mappages d'utilisateurs pour les connexions Utilisateurs? – Serveur d’impression
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