2011-08-03 92 views
0

我正在使用MSSQL 2008 R2。我有一個特殊的數據庫,它在恢復時可以從SQL Management Studio的每個人都可以訪問。通過使用以下SQL語句,我發現Public服務器角色已被授予此數據庫的連接權限。撤銷公共角色的連接權限

use db_mydb 
SELECT * 
    FROM sys.database_permissions 
WHERE grantee_principal_id = (SELECT principal_id 
           FROM sys.server_principals 
           WHERE name ='public') 

與此查詢是下面

0 DATABASE 0 0 2 1 CO CONNECT G GRANT

的結果是否有任何變通撤銷此權限嗎?

回答

0

我對這個解決方案之間無共同的列創建一個空的數據庫。然後使用生成腳本對錶格,視圖和存儲的執行程序進行腳本編寫。然後使用導入數據選項導入數據。所有這些都可以使用Micosoft SQL Management Studio來完成。

+0

這意味着在兩臺服務器上都設置了一些登錄*並且用戶也存在。所以在還原時,安全性會自動授予。正如我所提到的,與公衆無關。您可以在2 sys.xxx_principals視圖中找到哪些使用sid列 – gbn

+0

數據庫沒有任何用戶 –

0

一個正確的方式將

  • 運行DROP用戶數據庫
  • 運行的所有用戶DENY CONNECT TO這些用戶

做公共

不亂您的代碼也會誤導您:

  • 服務器級別的公共角色無關的數據庫層次的公共角色
  • sys.database_permissions.grantee_principal_idsys.database_principals
  • 對於角色,有sys.database_permissions/sys.database_principalssys.server_principals
+0

感謝您的帖子,我的問題是,這個特定的數據庫沒有任何用戶訪問它,但是可以訪問。因此我不能做類似 'use db_test;拒絕連接到TestUser;' 的確,我確實被我的代碼誤導了。認爲應該看起來更像 '使用db_test; select * from sys.database_permissions where grantee_principal_id = (SELECT principal_id from sys.database_principals where name ='public');' –

+0

我不想搞亂公共角色。在從SQL 2000遷移到SQL 2008之前,似乎它已經被修改了,我在這裏要做的是恢復「默認」權限。 –

+0

沒有「默認」權限。連接的用戶必須是系統管理員或者他們已經可以訪問(例如,組/登錄位於舊服務器和新服務器上) – gbn