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

SQL - Permissions on an User-Defined Alias Type

作为(大约)项目 DBA,我创建了一个类型别名:

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 服务器将别名类型视为需要权限的东西。呃.

我需要更改什么才能解决此问题? 我能找到的唯一搜索结果是关于对用户定义的 Table 类型授予执行权限,这在这里似乎不相关?

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

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

默认情况下,用户有 EXECUTEVIEW DEFINITION。我分配了 REFERENCES 并且东西又工作了。 其他可用的权限是 TAKE OWNERSHIPCONTROL


MSDN 引用,这对于 Created Types 确实是必要的:https://msdn.microsoft.com/en-us/library/ms175007.aspx

Unlike user-defined types that are created by using sp_addtype, the public database role is not automatically granted REFERENCES permission on types that are created by using CREATE TYPE. This permission must be granted separately.


我通过在此处找到对该问题的更广泛讨论来解决此问题: 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')