SQL - 用户定义别名类型的权限

3

作为这个项目的数据库管理员,我创建了一个类型别名:

CREATE TYPE StockQuantity AS numeric(18,2)

我已经在视图和表格等方面使用了它。

其他一些开发人员由于项目政策只拥有较低的数据库权限,现在无法更新这些视图和权限。

当他们尝试更新时,会收到以下错误信息:

Cannot find the type 'StockQuantity', because it does not exist or you do not have permission.

如果他们将StockQuantity替换为numeric(18,2),那么它将正常工作。 如果我运行ALTER脚本,它也可以正常工作。
显然,SQL服务器认为Alias Type是需要权限的东西。呃。
我需要改变什么才能解决这个问题? 我只能找到关于在用户定义的表类型上GRANT EXECUTE权限的搜索结果,这似乎与此无关?

2
不良习惯:使用别名类型 - Aaron Bertrand - 2009-10-14 - SqlZim
是的,我已经看过那篇帖子了。我知道别名类型有一些令人失望的限制。但我得出结论,别名类型的标记特性在这里是非常有价值的,值得使用。 - Brondahl
1
该链接已更新:https://sqlblog.org/2009/10/14/bad-habits-to-kick-using-alias-types - Brondahl
1个回答

1

答案 - 我需要授予其他用户REFERENCES权限。

GRANT REFERENCES ON TYPE::dbo.StockQuantity TO OtherDevUser;

默认情况下,用户具有EXECUTEVIEW DEFINITION权限。我分配了REFERENCES权限,然后一切正常了。 其他可用的权限包括TAKE OWNERSHIPCONTROL

MSDN引用证明对于创建的类型确实是必需的:https://msdn.microsoft.com/zh-cn/library/ms175007.aspx

与使用sp_addtype创建的用户定义类型不同,公共数据库角色不会自动被授予对使用CREATE TYPE创建的类型的REFERENCES权限。必须单独授予此权限。


我通过在这里找到了更广泛的讨论来解决这个问题: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/274456c2-1e4a-436b-b10b-a972e95f9e87/references-and-view-definition-permissions-to-a-user-on-an-alias-data-type?forum=sqlsecurity

为了确定其他用户的操作,我让他运行:

SELECT CURRENT_USER

为了验证我和其他开发者拥有的权限,我运行了以下命令:

SELECT * FROM fn_my_permissions('StockQuantity','type') 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接