(4.25)Sqlserver中 登录用户只能看到自己拥有权限的库
【最佳实践】
参考:https://www.cnblogs.com/gered/p/10254560.html#_label1_0
【本文】
问题背景:公司的一台数据库服务器上放在多个数据库,每个数据库都使用不同的登录名称,但在将项目文件发布到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数据库了

注意:很多时候我们发现好像并没有生效,那么试试重启SSMS看看。
参考:
分类:
MSSQL dba管理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2018-06-06 (3.12)常用知识-事务的隔离级别
2018-06-06 (3.11)常用知识-锁
2018-06-06 (3.10)常用知识-T-SQL优化
2018-06-06 (3.9)常用知识-标识值(identity)的不连续与强行插入、计算列
2018-06-06 (3.8)常用知识-临时表、表变量、CTE的对比
2018-06-06 (3.7)常用知识-sql server游标的取舍
2018-06-06 (3.6)常用知识-sql server字符编码与排序规则