【问题标题】:Permissions to invoke UDT method in SQL/CLR在 SQL/CLR 中调用 UDT 方法的权限
【发布时间】:2012-12-04 03:03:06
【问题描述】:

我使用SQL/CLR 从程序集在SQL 服务器中创建用户定义类型。我可以通过sa 调用它的方法,但不能通过公共用户调用。

错误信息是:

System.Data.SqlClient.SqlException: no permission to execute。

System.Data.SqlClient.SqlException: 

in System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

in System.Data.SqlClient.SqlDataReaderSmi.InternalNextResult(Boolean ignoreNonFatalMessages)

in System.Data.SqlClient.SqlDataReaderSmi.NextResult()

in System.Data.SqlClient.SqlCommand.RunExecuteReaderSmi(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)

in System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)

in System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)

in System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)

in System.Data.SqlClient.SqlCommand.ExecuteReader()

in MyAssembly.MyType.Parse(SqlString param)

如何授予公共用户调用方法的权限? 谢谢!

【问题讨论】:

    标签: .net sql-server sqlclr


    【解决方案1】:

    您的数据库用户是 db_owner 角色的成员吗?否则

    试试这个,

    在 SQL Server 管理工作室中

    展开数据库 -> 展开安全性 -> 展开用户

    然后右键单击您用来连接的数据库用户 -> 属性

    从右上角的窗格中选择“Securables”。

    从底部面板添加您的对象并授予您想要的权限。

    【讨论】:

    • 我按照你说的做了,但是我只找到'用户定义的数据类型'和'用户定义的表类型',但我的对象是'用户定义的类型'。所以我暂时无法解决这个问题。
    • 装配没有EXECUTE权限,我试过REFERENCE,还是不行。
    • 也许你可以通过代码尝试它然后语法:GRANT EXECUTE ON TYPE::[dbo].[YourType] to [DBUserAccount]
    • 谢谢!我已经尝试过这种方法但不起作用。现在我找到了解决方案:GRANT VIEW SERVER STATE TO [the user]。 (在主数据库中执行)
    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 2019-02-22
    • 2023-03-12
    • 2021-07-02
    • 2019-04-23
    • 1970-01-01
    • 2017-11-16
    • 2016-06-14
    相关资源
    最近更新 更多