如何配置 MS SQL Server 以防止將所有數據庫名稱和登錄資訊暴露給任何經過身份驗證的使用者?
我是 MS SQL 的新手,作為一名系統管理員經驗有限且希望他的服務提供商使用最佳實踐的 Web 開發人員提出這個問題。
我們在託管公司提供的遠端 MS SQL 伺服器上有一個數據庫。我們託管公司的其他客戶將同一台伺服器用於他們的數據庫。當我使用 Microsoft SQL Server Management Studio Express 登錄到伺服器時,我可以看到很多資訊,包括伺服器上所有數據庫的名稱和所有登錄名。
雖然我無法訪問其他客戶的數據庫,也無法查看密碼,但我什至能夠看到這些資訊對我來說似乎很奇怪。我當然不希望其他客戶知道我的數據庫名稱或我的登錄名。當我向我的服務提供商提出這個問題時,他的回復是:
我諮詢了我的 SQL 人員,他說不幸的是 MSSQL Server 的限制。儘管數據庫名稱是可見的,但如果沒有該數據庫的密碼,您將無法訪問任何數據庫。
這是我登錄後看到的:
mssql.server.com
數據庫
- 系統數據庫
- 一大堆客戶數據庫…
安全
- 登錄
- 一大堆客戶端登錄…
伺服器對象
複製
管理
**這是設置 SQL Server 的正確方法嗎?**請確認或否認我的懷疑,答案是否定的,我需要找其他人來託管我們的數據庫。
從開發方面來說,我可以說管理員應該能夠將每個人鎖定在他們自己的數據庫中(對於元數據,也可能是 master)。從 MSDN 中,SQL Server 安全對象列表包括數據庫,權限包括甚至能夠查看數據庫。 這是指向數據庫的 MSDN 安全注意事項的連結。
Management Studio 從 sys.databases 獲取數據庫列表。sys.databases的預設權限是讓每個登錄名都只能看到它自己的數據庫:
如果 sys.databases 的呼叫者不是數據庫的所有者,並且數據庫不是 master 或 tempdb,則查看相應行所需的最低權限是 ALTER ANY DATABASE 或 VIEW ANY DATABASE 伺服器級權限,或 CREATE DATABASE 權限主數據庫。呼叫者連接的數據庫始終可以在 sys.databases 中查看。
如果您的登錄名可以看到他們自己的數據庫以外的數據庫,則表示該登錄名具有不必要的權限,例如 CREATE DATABASE。