4

我有一個數據庫,我想保留在主域,但阻止域管理員寫入它。閱讀權限不是問題。爲此,看起來我必須確保任何具有寫入權限的帳戶僅使用SQL登錄(因爲域管理員可以重置任何其他域帳戶的密碼)。我意識到這有其他安全性影響。另一個問題是,Windows服務器上的管理員使用數據庫mdf文件並將其附加到另一個實例並修改數據庫內容,然後替換原始服務器上的mdf。我首先想知道這是否可能,或者是否需要通過sql server重新連接?如何從域管理員保護SQL數據庫?

由於服務器仍在域中,域管理員顯然是服務器上的管理員。是否有其他方法可以讓他們獲得對我應該擔心的數據庫的寫權限(例如刪除主數據庫mdf)?

+0

簡短的回答是你不能。域管理員在域中具有特殊的權限。您可以撤銷本地管理員在SQL Server中的訪問權限,但如果他們真的想要訪問,他們仍然可以訪問(http://technet.microsoft.com/zh-cn/library/dd207004.aspx)。但是,在訪問權限被刪除之後,他們獲得訪問權限時,會涉及相當多的工作,並且需要重新啓動。你可能會設置一個服務器級別的觸發器,當SQL Server登錄被更改時通過電子郵件發送給你,然後你就會知道是否有人試圖使用這種方法獲得訪問權限。 – BateTech

回答

4

哇。大問題....我可以假設你是dba嗎?在繼續之前,請快速聲明:在更改登錄權限時要非常小心。特別是作爲sysadmin固定服務器角色一部分的登錄名。可以刪除該角色的所有登錄名。如果您的服務器僅使用Windows身份驗證(或者沒有人知道sa密碼),則可以將自己鎖定在sql實例之外。那很不好。非常差...

服務器級別登錄 域管理員和sql server系統管理員是不等效的。如果您在SSMS中,深入瞭解安全性|登錄並展開。可能有一個「BUILTIN \ Administrators」登錄帳戶。雙擊它以檢查該登錄的屬性。選擇「服務器角色」。如果選中「sysadmin」服務器角色,則所有域管理員都對您的sql實例具有「sysadmin」權限。如果你取消選中它,你就可以獲得這個特權。對於域管理員(或本地計算機管理員)具有系統管理員權限,必須將他們明確添加到系統管理員角色。在SQL的早期版本(2000和2005年)中,默認情況下,BUILTIN \ Administrators是sysadmin的一部分。 MS在更高版本中對此進行了更改,因爲這是一個安全問題。如果域管理員都有自己的登錄名(例如YourDomain \ JSmith),那麼您必須從sysadmin角色中刪除這些單獨的登錄名。這將顯示所有的系統管理員的一部分登錄:您需要確定本地數據庫用戶與SQL Server登錄關聯SELECT * FROM sys.syslogins WHERE sysadmin = 1

數據庫用戶 下一步。系統管理員登錄會自動作爲數據庫所有者(db_owner)進行連接,因此您可能看不到任何數據庫用戶(缺省數據庫除外)。從SSMS開始,深入到YourDbName | Security | Users並展開。雙擊用戶以打開「屬性」對話框。 「常規」頁面將顯示該用戶的登錄信息。 「成員資格」將顯示用戶所屬的數據庫級角色。如果有用戶映射回網絡管理員的sql服務器登錄名,那很好。但是,假設,如果您從sysadmin固定服務器角色中刪除了BUILTIN \ Administrators sql登錄名,那麼該登錄名將不再能夠以dbo身份連接到數據庫。您必須創建一個新的數據庫用戶並將其與登錄關聯。就像CREATE USER [DomainAdminUser] FOR LOGIN [BUILTIN\Administrators]然後,你可以開始對用戶的權限分層。你只想允許讀取權限,對吧?將db用戶添加到固定db角色db_datareader:EXEC sp_addrolemember N'db_datawriter', 'DomainAdminUser'。如果他們需要更多權限,則根據需要添加。

別的東西,你提到的是一個域管理員分離數據庫的可能性,將其連接到他們具有系統管理員權限的數據庫中變化的數據的另一個SQL Server實例,然後重新安裝回原來的SQL Server實例。我不確定你可以做些什麼來防止這種情況發生。作爲域管理員,他/她可以關閉SQL Server NT服務並獲取mdf/ldf文件並按照他們的意願進行操作。這似乎是採取域管理員的極端措施。如果發生這種情況,我認爲這是終止的理由。他們真的會走這麼遠嗎?

最後,SQL Server的安全性/權限級別相當複雜。請不要依賴這篇文章來解答所有問題。從這些鏈接開始,儘可能地學習。

Permissions Hierarchy (Database Engine)

Server-Level Roles

Database-Level Roles