Guest User

Untitled

a guest
Sep 11th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. Granting access to one db to users/roles of another
  2. USE [database1]
  3. GRANT EXECUTE ON [database2].[dbo].[CUSTOM_PROCEDURE] TO [applicationrole1]
  4.  
  5. OR
  6.  
  7. USE [database2]
  8. GRANT EXECUTE ON [dbo].[CUSTOM_PROCEDURE] TO [database1].[dbo].[applicationrole1]
  9.  
  10. INSERT INTO Database2.sys.database_principals
  11. SELECT * FROM Database1.sys.database_principals
  12. WHERE [type] = 'S'
  13.  
  14. use master
  15. go
  16. create login testuser with password = 'mypassword123'
  17. go
  18.  
  19. use test
  20. go
  21.  
  22. create role reporting
  23. grant select on something to reporting -- grant your permissions here
  24.  
  25. create user testuser for login testuser
  26. exec sp_addrolemember 'reporting', 'testuser'
  27. go
  28.  
  29. use test2
  30. go
  31.  
  32. create role reporting
  33. grant select on something2 to reporting -- grant your permissions here
  34.  
  35. create user testuser for login testuser
  36. exec sp_addrolemember 'reporting', 'testuser'
  37. go
  38.  
  39. select * from something
  40. select * from test2.dbo.something2
  41.  
  42. declare @sql nvarchar(max), @username nvarchar(50), @password nvarchar(50)
  43.  
  44. -- ########## SET PARAMETERS HERE
  45. SET @username = N'testguy'
  46. SET @password = N'test123'
  47. -- ########## END SET PARAMETERS
  48.  
  49. set @sql = N'USE master; CREATE LOGIN [' + @username + N'] WITH PASSWORD = N''' + @password + N'''; USE database1; CREATE USER [' + @username + N'] FOR LOGIN [' + @username + N']; EXEC sp_addrolemember ''reporting'', ''' + @username + N'''; USE database2; CREATE USER [' + @username + N'] FOR LOGIN [' + @username + N']; EXEC sp_addrolemember ''reporting'', ''' + @username + N''';'
  50. exec sp_executesql @sql
  51.  
  52. declare @login nvarchar(50), @user1 nvarchar(50), @user2 nvarchar(50), @sql nvarchar(max), @rolename nvarchar(50)
  53.  
  54. SET @rolename = 'reporting'
  55.  
  56. declare c cursor for
  57. select sp.name as login, dp1.name as user1, dp2.name as user2 from sys.server_principals as sp
  58. left outer join database1.sys.database_principals as dp1 on sp.sid = dp1.sid
  59. left outer join database2.sys.database_principals as dp2 on sp.sid = dp2.sid
  60. where sp.type = 'S'
  61. and sp.is_disabled = 0
  62.  
  63. open c
  64.  
  65. fetch next from c into @login, @user1, @user2
  66.  
  67. while @@FETCH_STATUS = 0 begin
  68.  
  69. -- create user in db1
  70. if (@user1 is null) begin
  71. SET @sql = N'USE database1; CREATE USER [' + @login + N'] FOR LOGIN [' + @login + N'];'
  72. EXEC sp_executesql @sql
  73. end
  74.  
  75. -- ensure user is member of role in db1
  76. SET @sql = N'USE database1; EXEC sp_addrolemember '''+ @rolename + ''', ''' + @login + N''';'
  77. EXEC sp_executesql @sql
  78.  
  79. -- create user in db2
  80. if (@user2 is null) begin
  81. SET @sql = N'USE database2; CREATE USER [' + @login + N'] FOR LOGIN [' + @login + N'];'
  82. EXEC sp_executesql @sql
  83. end
  84.  
  85. -- ensure user is member of role in db2
  86. SET @sql = N'USE database2; EXEC sp_addrolemember '''+ @rolename + ''', ''' + @login + N''';'
  87. EXEC sp_executesql @sql
  88.  
  89. fetch next from c into @login, @user1, @user2
  90. end
  91.  
  92.  
  93. close c
  94. deallocate c
Add Comment
Please, Sign In to add comment