SQL Server模式所有者权限

5

如果我这样做:

CREATE SCHEMA [test] AUTHORIZATION [testuser]
testuser 在模式上似乎没有任何权限,这是正确的吗?我以为作为拥有该模式的主体,您对其拥有完全控制权?
我需要授予 testuser 哪些权限,以便它仅对 test 模式具有完全控制权? 编辑: 我所说的“完全控制”是指能够 CRUD 表、视图、存储过程等。 编辑: 这是我的完整代码:
CREATE DATABASE [testdb]
Go
USE [testdb]

CREATE LOGIN [andrewbdesktop\testuser] FROM WINDOWS
Go

CREATE USER [andrewbdesktop\testuser] FROM LOGIN [andrewbdesktop\testuser]
Go

CREATE SCHEMA [test]
    AUTHORIZATION [andrewbdesktop\testuser]
Go

ALTER USER [andrewbdesktop\testuser] WITH DEFAULT_SCHEMA = [test]

谢谢

2个回答

5

默认情况下,模式所有者可以

  • 授予模式内任何对象的权限
  • 删除空模式
  • 删除模式内的任何对象

默认情况下,模式所有者无法

  • 在模式中创建对象。DDL 事件不是针对模式级别进行作用域控制,而是针对数据库级别进行作用域控制。

1

我相信你的陈述是将该用户设为模式的所有者,因此默认情况下应该已经完全控制该模式中的对象。

如果您想要更细粒度的控制,可以执行以下语句:

GRANT EXECUTE ON SCHEMA::test TO testuser
GRANT INSERT ON SCHEMA::test TO testuser
GRANT SELECT ON SCHEMA::test TO testuser
GRANT UPDATE ON SCHEMA::test TO testuser
GRANT DELETE ON SCHEMA::test TO testuser

这正是我所想的,如果我执行 create table [test].[newtable] (id int),会得到以下错误:在数据库 'test' 中拒绝了 CREATE TABLE 权限 - Andrew Bullock
您还必须是数据库中的有效用户,并且明确不被拒绝访问以在该模式中创建表。 - Dave Markle
嗯,我已经将所有的代码添加到问题中了,这看起来会导致访问被拒绝吗?谢谢。 - Andrew Bullock
不,你的代码看起来很好。我甚至在我的电脑上测试过了。你能发一下你的确切错误信息吗? - Dave Markle
我以dbo身份运行该代码,然后使用Windows身份验证作为testuser登录到sqlserver,如果我尝试创建一个表,我会得到以下错误信息:在数据库'testdb'中拒绝了CREATE TABLE权限。 - Andrew Bullock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接