我testtable
在数据库testbase
中创建了一个具有以下结构的表:
product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)
Run Code Online (Sandbox Code Playgroud)
我使用了 Microsoft SQL Server 2008 Management Studio。
我创建了一个存储过程testtable_pricesmaller
如下
use testbase
go
create procedure testtable_pricesmaller
@pricelimit money
as
select * from testtable where price = @pricelimit;
go
Run Code Online (Sandbox Code Playgroud)
并且能够查看Object Explorer
Microsoft SQL Server Management Studio上的存储过程。(它在下面的树结构中列出Object Explorer
)
Databases
+ testbase
+ Tables
+ dbo.testtable
+ Programmability
+ Stored Procedures
+ dbo.testtable_pricesmaller
Run Code Online (Sandbox Code Playgroud)
当我收到以下错误时,我觉得很奇怪:
Could not find the …
Run Code Online (Sandbox Code Playgroud) 我们添加了一个服务器登录名和数据库用户,使用以下脚本将 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 执行以下操作:
我对这些结果完全感到困惑。以下是我的问题:
我们刚刚开始在一个为简单起见而首选 SQL 身份验证的组织内使用 Windows 身份验证,所以我确信我的问题来自对差异的无知。这段代码早在我们考虑使用 Windows 身份验证之前就编写好了,所以我确信我们需要提高我们对使用 Windows 身份验证登录时创建新架构的理解,而不是数据库所有者。
如果您不知道,我是推动使用 Windows 身份验证而不是 SQL 身份验证的人。如果我们对此没有充分理解,我们将回到 …