Last active
April 16, 2025 18:37
-
-
Save tcartwright/5874d45643c3f4e2d43b49d077d1be7f to your computer and use it in GitHub Desktop.
SQL SERVER: Map logins to dbs, and assign roles
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--SELECT [sp].[name], [sp].[type_desc] FROM sys.[server_principals] AS [sp] WHERE type_desc LIKE 'windows%' ORDER BY [sp].[name] | |
-- SELECT * FROM sys.[server_principals] AS [sp] WHERE type_desc = 'WINDOWS_LOGIN' AND name LIKE '%.%' | |
DECLARE @username sysname = '****', | |
@role_name sysname = 'db_owner' | |
IF NOT EXISTS (SELECT * FROM sys.[server_principals] AS [sp] WHERE [sp].[name] = @username) BEGIN | |
RAISERROR('The user [%s] does not exist as a server login.', 16, 10, @username) | |
RETURN; | |
END | |
DECLARE @sql VARCHAR(MAX) = '' | |
SELECT @sql += CONCAT(' | |
/****************************************************************************************/ | |
/****************************************************************************************/ | |
/****************************************************************************************/ | |
RAISERROR(''USE [', [d].[name], '];'', 0, 1) WITH NOWAIT; | |
USE [', [d].[name], ']; | |
IF NOT EXISTS (SELECT 1 FROM [sys].[database_principals] AS [dp] WHERE [dp].[name] = ''', @username, ''') BEGIN | |
RAISERROR(''CREATE USER [', @username, '] FOR LOGIN [', @username, '];'', 0, 1) WITH NOWAIT; | |
CREATE USER [', @username, '] FOR LOGIN [', @username, ']; | |
END | |
IF IS_ROLEMEMBER(''', @role_name, ''', ''', @username, ''') IS NULL BEGIN | |
RAISERROR(''ALTER ROLE [', @role_name, '] ADD MEMBER [', @username, ']; '', 0, 1) WITH NOWAIT; | |
ALTER ROLE [', @role_name, '] ADD MEMBER [', @username, ']; | |
END | |
') | |
FROM sys.databases AS [d] | |
WHERE d.[database_id] NOT IN (1, 2, 4) /* make changes to model so new dbs have the same rights */ | |
ORDER BY [d].[name] | |
-- cast it to xml so the value can be clicked open into a window | |
SELECT CAST(@sql AS XML) | |
EXEC (@sql) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment