设置SqlDependency
时,我使用了这些文章中的信息,以便为数据库用户提供所需的最低权限:
结束了这样的事情:
CREATE ROLE [sql_dependency_user] AUTHORIZATION [dbo];
GRANT REFERENCES ON CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] TO [sql_dependency_user];
-- for Start()
GRANT CREATE PROCEDURE to [sql_dependency_user];
GRANT CREATE QUEUE to [sql_dependency_user];
GRANT CREATE SERVICE to [sql_dependency_user];
GRANT VIEW DEFINITION TO [sql_dependency_user];
-- for subscribe
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [sql_dependency_user];
GRANT RECEIVE ON QueryNotificationErrorsQueue TO [sql_dependency_user];
如果我创建了此角色所拥有的架构,并将用户添加到此角色(如上面的keithelder link所示):
CREATE SCHEMA [sql_dependency] AUTHORIZATION [sql_dependency_user]
ALTER USER [user_name] WITH DEFAULT_SCHEMA = [sql_dependency]
SqlDependency.Start()
会抛出错误:
无法找到指定的用户' 找不到队列' SqlQueryNotificationService-00000000-0000-0000-0000-000000000000',因为它不存在或您没有权限。
无效的对象名称' SqlQueryNotificationService-00000000-0000-0000-0000-000000000000'。
但是,如果我将用户DEFAULT_SCHEMA
设置为用户拥有的用户,那么它(当然)可以正常工作。
我正在使用SQL Server 2012
我已经查看了this related question,但似乎在模式上向用户提供ALTER
和/或CONTROL
似乎无法正常工作
答案 0 :(得分:0)
回答你的问题:1) 我有同样的问题。 如果有人仍然面临问题。请遵循以下解决方案:
您需要将所有者分配给您的架构。运行以下查询,它应该解决您的问题:
ALTER AUTHORIZATION ON DATABASE::MyDatabaseName TO NewOwner;
GO
在你的情况下:
ALTER AUTHORIZATION ON SCHEMA::[sql_dependency] TO [sql_dependency_user];