1

我想知道 sql server 存储过程的默认权限是什么。例如,我在数据库中创建了一个用户,但除了执行权限之外没有授予任何角色或权限,例如:

GRANT EXECUTE ON SCHEMA :: [dbo] TO [newUser]

后来我(作为sa登录)创建了一个存储过程,它只从表中进行选择,例如:

CREATE PROCEDURE dbo.selectX AS
BEGIN
 SELECT ID, NAME FROM MyTable
END

我的用户 [ newUser ] 可以执行并查看 select 语句的结果,例如:

EXEC dbo.selectX

到目前为止,我可以假设存储过程具有我的用户没有的默认权限。我尝试了其他 dmls,如UPDATEINSERTDELETE并且用户成功地执行了程序。但!当我使用 ddl 创建一个过程作为创建表时 .. 例如:

CREATE PROCEDURE dbo.crtNT AS
BEGIN

    CREATE TABLE del(id int) --for test
END

并且当 newUser 执行此过程时,会发生如下错误:

CREATE TABLE permission denied in database 'MyDb'

这是我的问题:默认情况下,存储过程是否对 DML(select, insert, update vs.) 有权限,但对 DDL(create, drop table vs.) 没有权限?因为我在联机丛书或其他任何地方都没有看到任何关于这种情况的解释。任何意见都将受到欢迎。

4

1 回答 1

1

您的假设是正确的,即 DDL 语句的处理方式不同。

带有 DML 语句的过程通过所有权链接EXECUTE AS机制工作,但是正如文档中的引用所述

请记住,所有权链接仅适用于 DML 语句。

于 2012-05-28T16:22:28.773 回答