相关疑难解决方法(0)

未在 dbo 架构下创建表

在 SSMS 中创建表时,我意识到如果执行以下语句:

CREATE TABLE [tableName];
Run Code Online (Sandbox Code Playgroud)

该表将在您自己的架构(而不是 dbo)下创建。因此,为了在 dbo 模式下创建它,您需要明确说明,如下所示:

CREATE TABLE [dbo].[tableName];
Run Code Online (Sandbox Code Playgroud)

有谁知道一种方法(例如服务器范围的设置),以便在创建表时不需要指定 [dbo] 部分?

sql-server sql-server-2008-r2

18
推荐指数
2
解决办法
4万
查看次数

SQL 2008 R2 在 Windows 用户创建表时创建用户/模式

我们添加了一个服务器登录名和数据库用户,使用以下脚本将 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
Run Code Online (Sandbox Code Playgroud)

当 DOMAIN\User1 帐户登录到该应用程序时,User1 可以很好地查询 dbo 架构中的表,因为 User1 是 DOMAIN\AppUsers 的成员,但该应用程序也允许用户创建表。在未指定架构的情况下创建这些表时,SQL Server 执行以下操作:

  1. 在 AppDb 中创建一个“DOMAIN\User1”用户,该用户使用未在 SSMS\Security\Logins 中列出的“DOMAIN\User1”登录名。
  2. 在 AppDb 中创建“DOMAIN\User1”架构。
  3. 使用新的“DOMAIN\User1”架构创建这些表。

我对这些结果完全感到困惑。以下是我的问题:

  1. 我希望表创建失败而不是创建其他对象。有人可以指出我解释这一点的在线书籍部分吗?
  2. 如果服务器要添加架构,为什么不创建“DOMAIN\AppUsers”架构并将新表添加到该架构?
  3. 此外,数据库如何使用未在 SSMS\Security\Logins 中显示的登录名?
  4. 查看 SSMS\Databases\AppDb\Security\Users 中的“DOMAIN\User1”用户,用户图标有一个向下的红色小箭头。这意味着什么?

我们刚刚开始在一个为简单起见而首选 SQL 身份验证的组织内使用 Windows 身份验证,所以我确信我的问题来自对差异的无知。这段代码早在我们考虑使用 Windows 身份验证之前就编写好了,所以我确信我们需要提高我们对使用 Windows 身份验证登录时创建新架构的理解,而不是数据库所有者。

如果您不知道,我是推动使用 Windows 身份验证而不是 SQL 身份验证的人。如果我们对此没有充分理解,我们将回到 …

authentication sql-server ssms sql-server-2008-r2

10
推荐指数
1
解决办法
2万
查看次数