다음을 통해 공유


How to check all users permissions in SQL Server

Hi everyone!

I am involved in a SharePoint 2010 SQL Server migration, and as you may know, you have follow this article:

https://technet.microsoft.com/en-us/library/cc512723(v=office.14).aspx

Truth is, that you need to update as well the users permissions in the destination instance. So the immediate question would be: How should I get all the permissions in my instance?

For that I found some blogs and articles showing how to check permissions in one single database, but I needed to check the whole instance, that would mean create a cursor, browse along the databases and finally execute the script that checks. so I created this script for that:

 if object_id('tempdb..#mitabla') is null
begin
 select 
 CONVERT(char(255), '') as databasename,
 convert(char(45),'') as srvLogin, 
  convert(char(45),'') as srvRole,
    convert(char(25),'') as dbUser,
 convert(char(25),'') as dbRole
  into #mitabla
end
else
begin
   delete from #mitabla
end

declare @mydatabase nvarchar(60)

declare bases_de_datos cursor
for
select
   name
from
    sys.databases


   open bases_de_datos
 fetch bases_de_datos into @mydatabase
   while @@FETCH_STATUS = 0
    begin

   declare @comando nvarchar(1024)
 print @comando
  set @comando = ' 
   use ' + @mydatabase + ' 
    insert into
     #mitabla
    (
       databasename,
       srvLogin, 
      srvRole,
        dbUser,
     dbRole
  )
   select 
 ''' + @mydatabase + ''' as databasename,
    convert(char(45),sp.name) as srvLogin, 
 convert(char(45),sp2.name) as srvRole,
  convert(char(25),dbp.name) as dbUser,
   convert(char(25),dbp2.name) as dbRole
   from 
   sys.server_principals as sp join
    sys.database_principals as dbp on sp.sid=dbp.sid join
   sys.database_role_members as dbrm on dbp.principal_Id=dbrm.member_principal_Id join
 sys.database_principals as dbp2 on dbrm.role_principal_id=dbp2.principal_id left join 
  sys.server_role_members as srm on sp.principal_id=srm.member_principal_id left join
 sys.server_principals as sp2 on srm.role_principal_id=sp2.principal_id  '
   
    fetch bases_de_datos into @mydatabase
   
    execute (@comando)
end
close bases_de_datos
deallocate bases_de_datos

select *  from #mitabla

 Hope this will help you!