Counter of Festivals

Ashok Blog for SQL Learners and Beginners and Experts

Thursday, 19 August 2021

TSQL To assign DB ROLE BULK of particular databases

TSQL To assign DB ROLE BULK of particular databases 


  --SELECT * FROM dbo.dbRolesUsersMap ('db_role_name')

 --SELECT * FROM dbo.dbRolesUsersMap (DEFAULT)


use db_name


    Declare @CustomeRole varchar(8000)

    Declare @provideuserrolerole varchar(8000)

Declare @user varchar(30)

Declare @assignrole varchar(100)

Declare @i int

    Declare @j int


set @assignrole='db_role_name'


  Select Distinct Rno=ROW_NUMBER()over(Order by members.name), members.name as 'members_name'


  into ##providedbprivilgeobjects 


FROM sys.database_role_members rolemem


INNER JOIN sys.database_principals roles


ON rolemem.role_principal_id = roles.principal_id


INNER JOIN sys.database_principals members


ON rolemem.member_principal_id = members.principal_id


where roles.name not in (SELECT Login_Name FROM dbo.dbRolesUsersMap ('db_role_name'))

and members.name not like '%\%'

ORDER BY members.name


Select @i=1,@j=COUNT(*) from ##providedbprivilgeobjects    

  

While @i <= @j    

Begin    

 

 Select @user=members_name from ##providedbprivilgeobjects where Rno=@i  


  set @provideuserrolerole='Use db_name'+space(2)+'ALTER ROLE '+space(1)+'['+@assignrole+']'+space(2)+'ADD MEMBER '+space(2)+'['+@user+']'+''

  

  --select @provideuserrolerole


  Print @provideuserrolerole


    --Execute(@provideuserrolerole) 


SET @i=@i+1


 End


 drop table ##providedbprivilgeobjects



Note:


use db_name

CREATE FUNCTION dbo.dbRolesUsersMap (@dbRole SYSNAME = '%')
RETURNS TABLE
AS
RETURN (
      SELECT 
        User_Type = 
           CASE mmbrp.[type] 
           WHEN 'G' THEN 'Windows Group' 
           WHEN 'S' THEN 'SQL User' 
           WHEN 'U' THEN 'Windows User' 
           END,
         Database_User_Name = mmbrp.[name],
         Login_Name = ul.[name],
         DB_Role = rolp.[name]
      FROM sys.database_role_members mmbr, -- The Role OR members associations table
         sys.database_principals rolp,     -- The DB Roles names table
         sys.database_principals mmbrp,    -- The Role members table (database users)
         sys.server_principals ul          -- The Login accounts table
      WHERE Upper (mmbrp.[type]) IN ( 'S', 'U', 'G' )
         -- No need for these system account types
         AND Upper (mmbrp.[name]) NOT IN ('SYS','INFORMATION_SCHEMA')
         AND rolp.[principal_id] = mmbr.[role_principal_id]
         AND mmbrp.[principal_id] = mmbr.[member_principal_id]
         AND ul.[sid] = mmbrp.[sid]
         AND rolp.[name] LIKE '%' + @dbRole + '%'
      )
GO

  --SELECT * FROM dbo.dbRolesUsersMap ('db_role_name')

 --SELECT * FROM dbo.dbRolesUsersMap (DEFAULT)

No comments:

Post a Comment