我们添加了服务器登录名和数据库用户,该用户使用以下脚本将Windows组映射到SQL 2008 R2实例,并更改了名称以实现匿名:
USE master
go
CREATE LOGIN [DOMAIN\AppUsers] FROM WINDOWS
WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
go
USE AppDb
go
CREATE USER [DOMAIN\AppUsers] FOR LOGIN
[DOMAIN\AppUsers]
go
EXEC sp_addrolemember N'db_owner', N'DOMAIN\AppUsers'
go
当DOMAIN \ User1帐户登录到应用程序时,User1可以在dbo模式中查询表,因为User1是DOMAIN \ AppUsers的成员,但是此应用程序也允许用户创建表。在不指定架构的情况下创建这些表时,SQL Server会执行以下操作:
- 在AppDb中创建一个“ DOMAIN \ User1”用户,该用户使用该实例的SSMS \ Security \ Logins中未列出的“ DOMAIN \ User1”登录名。
- 在AppDb中创建一个“ DOMAIN \ User1”架构。
- 在新的“ DOMAIN \ User1”架构中使用创建这些表。
这些结果令我完全困惑。这是我的问题:
- 我希望表创建失败,而不是创建其他对象。有人可以指出我在联机丛书中对此进行解释的部分吗?
- 如果服务器要添加架构,为什么服务器不创建“ DOMAIN \ AppUsers”架构并将新表添加到该架构?
- 另外,数据库如何使用SSMS \ Security \ Logins中未显示的登录名?
- 查看SSMS \ Databases \ AppDb \ Security \ Users中的“ DOMAIN \ User1”用户,该用户图标具有一个向下的红色小箭头。这意味着什么?
为了简单起见,我们刚刚开始在首选SQL身份验证的组织中使用Windows身份验证,因此,我敢肯定,我的问题来自对这些差异的不了解。该代码是在考虑使用Windows身份验证之前编写的,因此,我确定我们需要提高对以数据库所有者以外的任何其他人身份使用Windows身份验证登录时创建新架构的理解。
如果您不知道,我就是推动使用Windows身份验证而不是SQL身份验证的人。如果我们对此没有深刻的了解,我们将恢复为SQL身份验证。