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

标签 sql-server permissions user-defined-types

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

CREATE TYPE StockQuantity AS numeric(18,2)

然后我在 View 和表格等中使用了它。

一些其他开发人员,他们的数据库权限(项目政治)略低,现在无法更新这些 View 和权限。

当他们尝试时,他们会得到:

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

如果他们将 StockQuantity 替换为 numeric(18,2),则效果很好。 如果我运行 ALTER 脚本,它工作正常。

显然 SQL Server 将 Alias Type 视为需要权限的东西。呃。

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

最佳答案

回答 - 我需要为其他用户授予 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') 

关于sql-server - SQL - 用户定义别名类型的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42678398/

相关文章:

sql - T-SQL 仅在列值更改时触发

c# - 删除所有默认文件权限

azure - 限制 azure Active Directory 的成员权限

permissions - 了解liferay的权限系统

sql-server - SQL Server 2008 - 如何从表值函数返回用户定义的表类型?

c# - 无法将用户定义的数据类型参数添加到我的查询中

php - 存储过程在 php 中返回 null 或空值

sql-server - 为表多次指定了xxx列

java - Hibernate/JPA MSSQL 将括号替换为 `

json - Cassandra CQL3 : JSON or UDT