[SQL SERVER][Memo]限制物件總管資料庫列表

[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

image

雖然物件總管中看不到自己資料庫,但其實是可以存取的(取決登入者資料庫權限)。

 

改用 Authorization 顯示該登入者資料庫

USE MYDB;
GO
DROP USER [test];

USE [master];
GO
ALTER AUTHORIZATION ON DATABASE::MYDB TO [test];

image

但很不幸,目前依然無法透過權限方法去阻止使用者查看 master 、tempdb 這兩個系統資料庫。

 

 

 

 

參考

[SQL SERVER][Maintain]權限管理(1)

查詢 SQL Server 系統目錄

ALTER AUTHORIZATION

For shared SQL Server providers : hiding your list of databases from customers