【发布时间】: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,例如 UPDATE、INSERT、DELETE,并且用户成功地执行了程序。 但!当我使用 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