作为(大约)项目 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;
默认情况下,用户有EXECUTE
和VIEW DEFINITION
。我分配了 REFERENCES
并且东西又工作了。
其他可用的权限是 TAKE OWNERSHIP
和 CONTROL
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/