問題背景:公司的一台數據庫服務器上放在多個數據庫,每個數據庫都使用不同的登錄名稱,但在將項目文件發布到Ftp時,有些Ftp的信息是在客戶那邊的
一旦客戶那邊使用配置文件中的數據庫信息連接到數據庫他就能夠看到服務器上所有的數據庫,雖然它不能訪問其他的數據庫但還是有安全隱患的
現在我
需要的是指定的登錄用戶只能看到並訪問它自己的數據庫而不能看到其他的數據庫,
於是在網絡上找到解決方案
--創建測試數據庫 Create database Test; USE master GO --通過sp_addlogin創建登錄名 --TestUser:用戶登陸賬號 --Test123456:用戶登陸密碼 execute sp_addlogin 'TestUser','Test123456' --在數據庫Test里創建數據庫TestUser賬號 --每一個TestUser為登陸名 --第二個TestUser為數據庫賬號 execute sp_grantdbaccess 'TestUser','TestUser' --將TestUser賬號添加到數據庫角色為數據庫所有者 execute sp_addrolemember 'db_owner','TestUser'
在SSMS中使用“TestUser”賬號登錄后就可能看到所有的數據庫

但如果訪問的數據庫不是Test則為提示沒有權限

USE master GO --將所有數據庫的查看權限給Public角色,每個登錄用戶只能查看指定的數據庫 --此語句會導致服務器上所有的用戶在沒有設置數據庫權限的情況下不會顯示任何數據庫,有可能會影響正常使用 DENY VIEW any DATABASE TO PUBLIC; --將數據庫Test的所有權給TestUser用戶 --TestUser用戶可以查看並訪問Test數據庫 ALTER AUTHORIZATION ON DATABASE::Test TO TestUser
“
DENY VIEW any DATABASE TO PUBLIC
;
”后如果沒有進行權限設置默認的登錄用戶是不能查看任何數據庫的

“
ALTER AUTHORIZATION ON DATABASE
::
Test
TO
TestUser
”后TestUser就可以只能查看並訪問Test數據庫了

參考: