[SQL SERVER][Memo]限制物件總管資料庫列表
網友問題,自己順便紀錄一下。
之前權限管理有提到過,deny view any database to [login] 將無法再物件總管中看到任何資料庫清單
這樣的結果應該是一個bug(SQL2012 也是一樣),
一般我提供給其他廠商存取某資料庫相關資料表時(資料拋轉使用),
我也是採取這樣的方式,但難免會造成廠商一些困擾,
後來我查到原來利用 AUTHORIZATION 應該會是一個比較好的方法。
CREATE LOGIN [test] WITH
PASSWORD = N'test123',
DEFAULT_DATABASE = MYDB,
CHECK_EXPIRATION = OFF,
CHECK_POLICY = OFF;
GO
CREATE USER [test]
FOR LOGIN [test]
WITH DEFAULT_SCHEMA = [dbo];
GO
雖然物件總管中看不到自己資料庫,但其實是可以存取的(取決登入者資料庫權限)。
改用 Authorization 顯示該登入者資料庫
USE MYDB;
GO
DROP USER [test];
USE [master];
GO
ALTER AUTHORIZATION ON DATABASE::MYDB TO [test];
但很不幸,目前依然無法透過權限方法去阻止使用者查看 master 、tempdb 這兩個系統資料庫。
參考
For shared SQL Server providers : hiding your list of databases from customers