我有一個數據庫中有很多用戶。這些用戶屬於數據庫中的不同內置角色(例如db_ddladmin)。在SQL Server 2005中爲數據庫角色成員資格生成腳本
我想要生成一個腳本,用於創建具有相同角色分配的相同用戶以用於不同的數據庫。 SQL Management Studio似乎只爲用戶定義的角色生成sp_addrolemember調用,而不是內置調用。有什麼辦法可以讓它腳本化所有角色?
也許有任何其他更好的工具來從現有數據庫生成數據庫腳本(最好但不一定是免費的)?
我有一個數據庫中有很多用戶。這些用戶屬於數據庫中的不同內置角色(例如db_ddladmin)。在SQL Server 2005中爲數據庫角色成員資格生成腳本
我想要生成一個腳本,用於創建具有相同角色分配的相同用戶以用於不同的數據庫。 SQL Management Studio似乎只爲用戶定義的角色生成sp_addrolemember調用,而不是內置調用。有什麼辦法可以讓它腳本化所有角色?
也許有任何其他更好的工具來從現有數據庫生成數據庫腳本(最好但不一定是免費的)?
有關數據庫用戶及其分配角色的信息可在系統視圖 sys.database_principals和sys.database_role_members中使用。這些查詢查看該數據:
select * from sys.database_principals
select * from sys.database_role_members
我假設你有數據庫用戶和角色在數據庫中的配置,您希望他們複製到數據庫B.要創建在目標數據庫中的用戶:
運行生成的腳本。
SELECT 'CREATE USER [' + name + '] for login [' + name + ']'
from sys.database_principals
where Type = 'U'
and name <> 'dbo'
要配置新用戶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登錄名。如果您有用戶定義的角色,則需要先重新創建它們。 (角色和分配給它們的權限非常開放式的,而且我從來沒有想成爲的情況下我需要做到這一點!)
正是我期待的! :) – rickythefox 2010-07-18 20:38:11
完美,一個腳本來創建一個腳本..我曾嘗試用生成腳本腳本登錄...但遇到權限問題,現在沒有問題,謝謝。 – sonjz 2013-12-14 19:58:48
請注意,如果您的數據庫具有區分大小寫的排序規則,它應該是sp_addrolemember。我編輯了上面的答案以反映這一點。 – Chris 2016-07-06 13:30:05
對於DB用戶角色
SELECT 'CREATE ROLE [' + name + ']'
FROM sys.database_principals
where type='R' and is_fixed_role = 0 and name != 'public'
在寫答案時,嘗試格式化它們。 Stackoverflow使用降價。 – 2013-10-25 15:46:13
這應該通過使用系統表/視圖來編寫腳本。如果沒有其他人發帖,我會在稍後處理。 – 2010-07-16 14:44:07