我正在为开发人员面试设置一台笔记本电脑,准备进行编码测试。我想为每个候选人创建一个数据库,但是在面试本身之前。我的准备是这样的:
这样当我作为每个候选人登录到Windows时,如果他们打开SSMS,他们只能在对象资源管理器中看到自己的数据库。
我想这样做,因为在访谈之间通常没有足够的时间来备份/分离前一个候选人的数据库并创建下一个候选人的数据库(机器很慢,所以再次注销/开启等需要时间)。
这是可能的,如果是的话,怎么样?
非常感谢提前。
答案 0 :(得分:5)
似乎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>
答案 1 :(得分:1)
使用SQL Server,您可以分离和附加数据库。因此,您可以将其作为普通和中间候选人登录,只需分离先前的候选数据库,然后附加下一个候选数据库。
使用以前的候选Visual Studio项目,您可以使用密码将其压缩。
答案 2 :(得分:0)
登录SSMS。
单击数据库,单击您创建的数据库。
展开安全性,单击“用户”,然后将Windows登录添加到此数据库。 确保不要将其作为漏洞添加到服务器。
然后您的候选人可以使用集成安全性登录,只查看他们的数据库,或者至少他们只能访问该数据库。
答案 3 :(得分:0)
就我个人而言,我会稍微有所不同 - 我不会为每个候选人设置一个单独的Windows帐户,而是我只使用一个Windows帐户并为每个帐户设置 SQL登录。根据 p.campbell 的答案撤销VIEW ANY DATABASE
,然后将每个SQL登录作为用户添加到各自的数据库中。
通过这种方式,您可以在每个候选人到达时登录计算机,他们所要做的就是使用您提供的SQL登录信息连接到SQL实例。