Sqlserver中 登录用户只能看到自己拥有权限的库
问题背景:公司的一台数据库服务器上放在多个数据库,每个数据库都使用不同的登录名称,但在将项目文件发布到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数据库了

参考:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程