sql-server - 设置仅对特定用户可见的 SQL Server 数据库

标签 sql-server database authorization

我正在为开发人员面试设置一台笔记本电脑,为编码测试做好准备。我想为每位应聘者创建一个数据库,但要在面试之前就做好。我的准备工作是这样的:

  1. 以管理员身份登录。
  2. 为每位候选人创建本地 Windows 用户。
  3. 在 SQL Server 的本地默认实例上为每个候选人创建一个数据库(数据库名称中包含他们的名字)。

这样当我以每个候选人的身份登录 Windows 时,如果他们打开 SSMS,他们只能在对象资源管理器中看到他们自己的数据库。

我想这样做,因为在面试之间通常没有足够的时间来备份/分离前一个候选人的数据库并创建下一个候选人的数据库(机器很慢,所以重新注销/重新登录等需要时间)。

这是否可能,如果可能,如何实现?

非常感谢。

最佳答案

看来 SQL Server 2005+ 中有一个选项可以满足您的需求。听起来好像您的要求是用户不会看到对象资源管理器中的其他数据库。

How To Hide Databases in SQL Server突出显示 VIEW ANY DATABASE 权限。在需要对 Windows 用户 X 以外的所有用户隐藏数据库 X 的情况下,它可能很有用。

This MSDN forum thread (see the bottom-most posts)建议结合拒绝用户查看数据库和授予授权是一种可能的解决方案。

我已经在一台 SQL Server 2008 机器上复制了这个,但在这个快速测试中使用了 SQL Server 身份验证。它按描述工作:所有数据库都对登录隐藏,保存下面指定的数据库。

USE <customersdatabase>

ALTER AUTHORIZATION ON DATABASE::<customerdatabase> to <customerlogin>

USE MASTER

DENY VIEW ANY DATABASE TO <customerlogin>

关于sql-server - 设置仅对特定用户可见的 SQL Server 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4799812/

相关文章:

sql - 为什么包含空值的多列的 Sql Sum 返回错误结果?

c# - 替代 Group_Concat 以自定义现有 Entity Framework 模型

database - 如何开发供用户通过浏览器访问的数据库

mysql - 持续扩展更多表的数据库的最佳实践

.net - ASP.NET MVC3 中基于权限的授权

SQL OPENJSON - 解析 JSON 数组

mysql - SQL 中的矩阵连接?

基于 ROW_Number 的 SQL 查询不起作用

tomcat - Liferay 认证授权(Siteminder and Custom Tomcat Authorization)

asp.net-core - 如何在 asp.net core 2.x Web 应用程序中全局实现基于 AD 组的授权?