我通过从通用帐户中删除sysadmin权限开始在我们的测试环境中锁定权限。几个开发人员使用的第一个帐户是本地 SQL 登录。我为该帐户赋予了数据库中的db_owner角色。开发人员报告他不能再创建存储过程。
我已经在这个特定的 SQL 2014 实例中验证了这一点,我无法在其他任何地方重现它。我已经做了我能想到的一切来解决这个问题。我得到的最好的线索是我创建了一个新的 SQL 登录名,并在同一个数据库中给了它db_owner 。它也不能创建过程。原始登录无法在其他用户数据库中创建过程,即使它具有db_owner。
尝试创建一个过程会给出:
消息 262,级别 14,状态 18,过程 TheProcedure,第 30 行
CREATE PROCEDURE 权限在数据库“DBTest”中被拒绝。
错误消息是正确CREATE PROCEDURE
的,即使在我明确分配后也不会显示给用户。用户可以更改任何程序。UDF 创建得到类似的错误:
数据库中的 CREATE FUNCTION 权限被拒绝...
有人知道会发生什么吗?
当我做一个:
select * from fn_my_permissions(null, 'DATABASE')
CREATE PROCEDURE
未列出。我检查了 sys.permissions 中的任何DENY
内容,没有。
以下查询:
SELECT * FROM fn_my_permissions('xyz', 'USER');
返回:
IMPERSONATE, VIEW DEFINITION, ALTER, CONTROL