Sqlserver中 登陸用戶只能看到本身擁有權限的庫

問題背景:公司的一臺數據庫服務器上放在多個數據庫,每一個數據庫都使用不一樣的登陸名稱,但在將項目文件發佈到Ftp時,有些Ftp的信息是在客戶那邊的 html

一旦客戶那邊使用配置文件中的數據庫信息鏈接到數據庫他就可以看到服務器上全部的數據庫,雖然它不能訪問其餘的數據庫但仍是有安全隱患的 sql

如今我須要的是指定的登陸用戶只能看到並訪問它本身的數據庫而不能看到其餘的數據庫,因而在網絡上找到解決方案 數據庫

複製代碼

--建立測試數據庫
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數據庫了 antd

參考: 測試

使SQL用戶只能看到本身擁有權限的庫 3d

MSDN VIEW ANY DATABASE 權限 htm

MSDN ALTER AUTHORIZATION (Transact-SQL)

MSDN sp_addlogin (Transact-SQL)

相關文章
相關標籤/搜索