如何在SQL Server上設置Windows登錄,以便它對服務器上的任何數據庫具有隻讀訪問權限,並且將默認爲對任何數據庫具有隻讀訪問權限隨後添加數據庫。SQL Server安全性,只讀爲新數據庫的默認值
我寧願T-SQL代碼。
我使用SQL 2000
如何在SQL Server上設置Windows登錄,以便它對服務器上的任何數據庫具有隻讀訪問權限,並且將默認爲對任何數據庫具有隻讀訪問權限隨後添加數據庫。SQL Server安全性,只讀爲新數據庫的默認值
我寧願T-SQL代碼。
我使用SQL 2000
我會建議你創建一個新的組,讓所有用戶帳戶屬於它。然後在所有數據庫中爲該角色授予db_datareader權限。
要創建一個名爲「人人」的新服務器角色:
...然後把所有的用戶帳戶進去(你可以找到T-SQL從this article做到這一點,但你必須要把它挖出來 - 我的防火牆不會讓我在這裏發佈這個片段!)。
...然後讓角色的每一個數據庫的db_datareader角色的成員:
EXEC sp_msforeachdb 'USE [?] EXEC sp_addrolemember [db_datareader], [EVERYONE]';
(注意,出於安全考慮,您可能不希望在系統數據庫像「高手」全db_datareader權限,所以你可以可以從這些刪除Everyone組)
現在,你只需要記住:
EXEC sp_addrolemember [EVERYONE], [new_user_name]
USE [new_db_name]; EXEC sp_addrolemember [db_datareader], [EVERYONE]
對於新數據庫,能不只需將用戶/組添加到模型數據庫中的只讀角色即可。創建新數據庫時,將用作模板。
最簡單的解決方案是將您的用戶添加到模型數據庫。所有新的數據庫從model「繼承」,因此,如果您添加的用戶那裏,它會自動在所有新的:
use model
exec sp_adduser @Loginame = 'MyLogin', @name_in_db = 'MyUser'
exec sp_addrolemember @rolename = 'db_datareader', @membername = 'MyUser'
請注意,這僅適用,如果你實際執行CREATE DATABASE。如果通過恢復備份(或者CREATE然後RESTORE)來創建新的數據庫,那麼備份的內容將覆蓋來自模型的任何內容。
如果您的需求更爲複雜,請編寫您自己的腳本或工具來創建新的數據庫,並將邏輯放在那裏。無論如何,如果您必須管理大量數據庫,您可能會這樣做。
sp_addrole創建數據庫角色,而不是服務器角色。目前無法在任何版本的MSSQL中創建服務器角色。 – Pondlife 2010-08-26 15:57:12
啊,好點,@Pondlife!這將是一個管理噩夢,在每個數據庫中創建本地角色並與所有用戶一起填充。我想如果你使用的是Windows身份驗證,你可以使用包含所有擁有SQL Server權限的用戶的域組登錄名,然後將datareader角色賦予每個數據庫中的登錄名。因此,每當該組中的用戶沒有用戶特定的登錄權限時,就會回退到給定的數據庫角色。 – ewall 2010-08-26 18:08:25