我們經常負責在我們的生產和開發環境之間備份和恢復數據庫。當這些服務器位於不同的區域時,這個任務中最枯燥的部分是在SQL中一個一個地重新創建數據庫用戶。在還原的數據庫上重新創建安全性?
我正在尋找一種方法來檢索特定數據庫(Windows用戶和組,SQL用戶和角色)上的所有用戶以及他們當前的權限級別,然後在數據庫恢復後以某種方式使用這些結果重新創建權限。
任何人都可以幫助我開始正確的方向嗎?
問候,
馬修
我們經常負責在我們的生產和開發環境之間備份和恢復數據庫。當這些服務器位於不同的區域時,這個任務中最枯燥的部分是在SQL中一個一個地重新創建數據庫用戶。在還原的數據庫上重新創建安全性?
我正在尋找一種方法來檢索特定數據庫(Windows用戶和組,SQL用戶和角色)上的所有用戶以及他們當前的權限級別,然後在數據庫恢復後以某種方式使用這些結果重新創建權限。
任何人都可以幫助我開始正確的方向嗎?
問候,
馬修
此URL應幫助您開始。 http://support.microsoft.com/kb/918992 它的傳輸登錄的組合,我個人使用SSIS爲此,然後根據上面的鏈接創建用戶。
下面的查詢應該: 創建保存查詢一個臨時表來執行 負載與查詢的臨時表中添加所有登錄 負載與查詢的臨時表中添加的所有用戶(登錄) 負載該查詢添加所有權限(表)
然後它打印出所有這些語句,您應該能夠複製到新環境中的查詢窗口並執行。
希望這對你來說是一個很好的起點。
if object_id('dbo.tempUsers') is not null
Drop table dbo.tempUsers
Create table tempUsers(ID int identity , Queries Varchar(255))
Insert into tempUsers(Queries)
select 'Create login [' + su.name + '] with password ' + su.password
FROM sys.sysusers su
Insert into tempUsers(Queries)
select 'Create user [' + su.name + '] for login [' + su.password + ']'
FROM sys.sysusers su
Insert into tempUsers(Queries)
select 'GRANT ' + dp.permission_name collate latin1_general_cs_as
+ ' ON ' + s.name + '.' + o.name + ' TO ' + '[' + dpr.name + ']'
FROM sys.database_permissions AS dp
INNER JOIN sys.objects AS o ON dp.major_id=o.object_id
INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id
INNER JOIN sys.database_principals AS dpr ON dp.grantee_principal_id=dpr.principal_id
where o.type = 'U'
declare @count int, @max int, @query Varchar(255)
set @count =1
set @max = (Select max(ID) from tempUsers)
set @query = (Select Queries from tempUsers where ID = @count)
while(@count < @max)
begin
print(@query)
set @count += 1
set @query = (Select Queries from tempUsers where ID = @count)
end