usp_tmp_copypermissions

Parameters

Parameter Parameter Type Mode Description
@ORIGINALTABLE nvarchar(max) IN
@DESTINATIONVIEW nvarchar(max) IN

Definition

Copy


create procedure usp_tmp_copypermissions ( @ORIGINALTABLE nvarchar(max), @DESTINATIONVIEW nvarchar(MAX) )
as

declare grants cursor local forward_only for
    select 
 case minor_id 
 when 0 then
  'grant ' + permission_name + ' on [dbo].' + @DESTINATIONVIEW collate database_Default + ' to [' + pr.name + ']' 
 else
  'grant ' + permission_name + ' (' + c.name + ') on [dbo].' + @DESTINATIONVIEW collate database_Default + ' to [' + pr.name + ']' 
 end
 from sys.database_permissions as pe
        inner join sys.database_principals as pr on pr.principal_id = pe.grantee_principal_id
        inner join sys.objects as o on pe.major_id = o.object_id
        left outer join sys.columns as c on c.object_id = pe.major_id and c.column_id = pe.minor_id
 where permission_name in('SELECT','UPDATE','INSERT') and o.name=@ORIGINALTABLE


declare @STMT nvarchar(max)

open grants;
fetch next from grants into @STMT;

while @@FETCH_STATUS = 0
begin
    print @STMT;
    execute (@STMT);
    fetch next from grants into @STMT;
end;
close grants;
deallocate grants;