Skip to content

Instantly share code, notes, and snippets.

@tcartwright
Last active April 16, 2025 18:37
Show Gist options
  • Save tcartwright/5874d45643c3f4e2d43b49d077d1be7f to your computer and use it in GitHub Desktop.
Save tcartwright/5874d45643c3f4e2d43b49d077d1be7f to your computer and use it in GitHub Desktop.
SQL SERVER: Map logins to dbs, and assign roles
--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