【问题标题】:sql server default procedure permissionssql server 默认过程权限
【发布时间】:2012-06-02 14:30:57
【问题描述】:

我想知道 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

到目前为止,我可以假设存储过程具有我的用户没有的默认权限。 我尝试了其他 dml,例如 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(选择、插入、更新与)权限,但不具有 DDL(创建、删除表与)权限?因为我在联机丛书或其他任何地方都没有看到任何关于这种情况的解释。 任何 cmets 都会受到欢迎。

【问题讨论】:

    标签: sql-server stored-procedures permissions create-table


    【解决方案1】:

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

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

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

    【讨论】:

    • 由于创建表需要架构级别的权限,所以你的解释和提供的链接都很满意。
    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 2015-11-12
    • 2011-09-22
    • 2019-07-02
    • 2012-02-24
    • 1970-01-01
    • 2018-12-06
    • 2014-10-24
    相关资源
    最近更新 更多