Sql-Server

將 SQL 登錄名和權限從一台伺服器複製到另一台伺服器

  • April 2, 2016

我需要將所有登錄名及其關聯的數據庫級權限從一台伺服器複製到另一台伺服器。我在伺服器 A 上使用 SQL Server 2008 R2,在伺服器 BI 上使用 SQL Server 2012 能夠找到一些不同的腳本來將登錄名從伺服器 A 傳輸到伺服器 B。但是,我還需要為每個登錄名傳輸數據庫級權限。

我已經查看了以下有關轉移登錄名的內容:

http://www.sqlsoldier.com/wp/sqlserver/transferring-logins-to-a-database-mirror http://support.microsoft.com/kb/918992

SQL Soldier 解決方案似乎工作正常。

駐留在伺服器 A 上的相同數據庫也駐留在伺服器 B 上。我如何自動化/編寫從一台伺服器到另一台伺服器的登錄和權限轉移?

根據這篇文章Claire-Hsu - SQL Logins ,我創建了一系列實現類似目標的儲存過程(帶有一些 powershell 風格)

我沒有自己的部落格(我知道,我知道),所以我無法與您分享我的精確解決方案。我基本上創建了三個儲存過程。一個用於伺服器登錄,一個用於數據庫,另一個用於數據庫對象權限。

啊,在我的一個驅動器上共享。 連結到文件 這是您需要的儲存過程。我的 DBA 數據庫中有它們。然後我使用 Powershell 獲取登錄列表,然後查詢儲存過程,將腳本保存到文件並重複。您可以輕鬆更改它以在不同的伺服器上執行腳本。

我有一個可用於此目的的儲存過程。

sp_dbpermissions

當您執行它時,它會將數據庫的所有權限提取到三個結果集中。第一個是委託人列表,第二個是角色成員資格,最後一個是直接權限(例如 GRANT EXEC ON SP)。每個結果集都包含一個用於刪除所述權限的腳本和另一個用於創建它的腳本。最重要的是,它最初是作為研究工具設計的,因此有很多方法可以限制數據。例如,該參數@LoginName將僅返回與給定伺服器主體名稱匹配的主體(而不是數據庫主體名稱),甚至更好地為您的目的選擇參數的All選項。@DBName它不僅執行所有數據庫(包括系統數據庫)的結果,而且USE在 drop & create 語句的開頭包含一個語句。

這樣,如果您需要為給定登錄生成所有權限,您可以執行以下命令:

EXEC sp_DBPermissions 'All',@LoginName = 'loginame'

注意:這不包括 CREATE LOGIN 語句。要做到這一點,要麼使用 SQL Soldiers 腳本,要麼還有一個 sp_SRVPermissions。

引用自:https://dba.stackexchange.com/questions/77430