我想知道 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,如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(select, insert, update vs.) 有权限,但对 DDL(create, drop table vs.) 没有权限?因为我在联机丛书或其他任何地方都没有看到任何关于这种情况的解释。任何意见都将受到欢迎。