2010-07-16 96 views
12

我有一個數據庫中有很多用戶。這些用戶屬於數據庫中的不同內置角色(例如db_ddladmin)。在SQL Server 2005中爲數據庫角色成員資格生成腳本

我想要生成一個腳本,用於創建具有相同角色分配的相同用戶以用於不同的數據庫。 SQL Management Studio似乎只爲用戶定義的角色生成sp_addrolemember調用,而不是內置調用。有什麼辦法可以讓它腳本化所有角色?

也許有任何其他更好的工具來從現有數據庫生成數據庫腳本(最好但不一定是免費的)?

+0

這應該通過使用系統表/視圖來編寫腳本。如果沒有其他人發帖,我會在稍後處理。 – 2010-07-16 14:44:07

回答

21

有關數據庫用戶及其分配角色的信息可在系統視圖 sys.database_principals和sys.database_role_members中使用。這些查詢查看該數據:

select * from sys.database_principals 
select * from sys.database_role_members 

我假設你有數據庫用戶和角色在數據庫中的配置,您希望他們複製到數據庫B.要創建在目標數據庫中的用戶:

  • 運行在數據庫中的以下查詢
  • 剪切,粘貼,審查,並在數據庫B

運行生成的腳本。

SELECT 'CREATE USER [' + name + '] for login [' + name + ']' 
from sys.database_principals 
where Type = 'U' 
    and name <> 'dbo' 

要配置新用戶B中具有相同的角色,因爲他們在一個有:

  • 運行在數據庫中的以下查詢
  • 剪切,粘貼,審查,並運行結果數據庫B中的腳本

SELECT 'EXECUTE sp_addrolemember ''' + roles.name + ''', ''' + users.name + '''' 
from sys.database_principals users 
    inner join sys.database_role_members link 
    on link.member_principal_id = users.principal_id 
    inner join sys.database_principals roles 
    on roles.principal_id = link.role_principal_id 

請務必查看這些腳本。可能會出現異常或特殊情況,而您只是不想搞亂安全性。

如果新數據庫位於不同的SQL Server實例上,則必須先創建SQL登錄名。如果您有用戶定義的角色,則需要先重新創建它們。 (角色和分配給它們的權限非常開放式的,而且我從來沒有想成爲的情況下我需要做到這一點!)

+0

正是我期待的! :) – rickythefox 2010-07-18 20:38:11

+0

完美,一個腳本來創建一個腳本..我曾嘗試用生成腳本腳本登錄...但遇到權限問題,現在沒有問題,謝謝。 – sonjz 2013-12-14 19:58:48

+0

請注意,如果您的數據庫具有區分大小寫的排序規則,它應該是sp_addrolemember。我編輯了上面的答案以反映這一點。 – Chris 2016-07-06 13:30:05

0

以下是來自Idera的一個選項: 它生成登錄名和權限,並可能幫助您完成正在嘗試的操作。

+0

我會檢查這個工具,謝謝! – rickythefox 2010-07-18 20:37:53

0

對於DB用戶角色

SELECT 'CREATE ROLE [' + name + ']' 
    FROM sys.database_principals 
    where type='R' and is_fixed_role = 0 and name != 'public' 
+0

在寫答案時,嘗試格式化它們。 Stackoverflow使用降價。 – 2013-10-25 15:46:13

相關問題