我正在尝试为SQL 2008资源调控器编写分类器函数.我想使用用户创建的数据库角色来确定用户是否应该进入特定的工作负载组.有问题的登录是SQL登录.我不能使用IS_MEMBER(),因为IS_MEMBER将自己限制为当前数据库上下文(在本例中为master).我无法使用[user database] .sys.database_principals,因为分类器函数必须是模式绑定的(因此限制查找到当前数据库上下文).此外,函数引用的任何视图也必须是模式绑定的,这意味着我无法在master中创建视图来引用用户数据库的安全视图.
这里的目标是能够基本上从master执行IS_MEMBER()以检查另一个数据库中的角色.
您可以在数据库中创建一个 DDL 触发器来更新 master 中的表,以便您也拥有其中的所有用户/组信息。然后您可以对此进行查询。您可能至少希望将触发器附加到 ADD_ROLE_MEMBER 和 DROP_ROLE_MEMBER。
我刚刚开始与资源调控器合作,所以如果我遇到一种“更干净”的方法,我会再次在这里发布。