当前位置 > 首页 > Sql

SQL Server普通用户执行SQL/CLR User-defined Type函数并访问数据库的权限问题

2012-12-4 14:27:00来源:Sql

我在SQL/CLR assembly中定义了一个User-defined Type,它的一个成员函数会访问数据库,代码如下:

[SqlMethod(SystemDataAccess = SystemDataAccessKind.Read)]
public static MyType Parse(SqlString param)
{
    var conn = new SqlConnection("context connection = true;");
    conn.Open();
    
    var cmd = conn.CreateCommand();
    
    cmd.CommandText = @"SELECT connection_id
        FROM sys.dm_exec_connections
        WHERE session_id = @@SPID
        AND parent_connection_id IS NULL";
    
    Guid id;
    
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            id = reader.GetGuid(0);
            
            break;
        }
    }
    
    conn.Close();
    
    return new MyType(id, param.Value);
}

用sa用户能够成功调用这个函数,但是使用普通用户调用就出现下面的错误:

消息 6522,级别 16,状态 1,第 1 行
在执行用户定义例程或聚合 "MyType" 期间出现 .NET Framework 错误:
System.Data.SqlClient.SqlException: 用户没有执行此操作的权限。
System.Data.SqlClient.SqlException:
   在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   在 System.Data.SqlClient.SqlDataReaderSmi.InternalNextResult(Boolean ignoreNonFatalMessages)
   在 System.Data.SqlClient.SqlDataReaderSmi.NextResult()
   在 System.Data.SqlClient.SqlCommand.RunExecuteReaderSmi(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)
   在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   在 System.Data.SqlClient.SqlCommand.ExecuteReader()
   在 QuantInv.Securities.MyType.Parse(SqlString param)

请问如何设置权限使得普通用户能调用上述函数呢?谢谢!



  • 高频处理器Google新机 三星Moment亮相

    2009-10-8 11:25:00

    Moment采用了 Google 的Android开源平台,是一款谷歌智能手机,也是三星公司近期推出的又一款采用该平台的手机,看来Android的确算的上来势汹汹,对微软的Windows Mobil

  • 测试Google Chrome Alpha:Linux 篇

    2009-6-16 10:46:00

    上周 Google 放出了首个Chrome for Linux Alpha Build(3.0.183.1),下面我用Ubuntu来跟Firefox对比测试一下。看起来目前还有很多重要功能依然缺失,

  • Google Search “Evolutilon” 发布会问答环节实录

    2009-12-8 12:05:00

    Google Search 发布会结束后的问答环节,回答来宾提问的包括:Marissa Mayer、Vic Gundotra、Amit Singhal。 问:在 Google 收购Naven之后

  • 微软拟投资8千万美元广告打击Google

    2009-5-26 17:07:00

    5月26日消息,据国外媒体报道,继微软与苹果的广告战之后,微软也开始对 Google 实施猎捕行动。 软件大亨微软计划为其新搜索引擎Bing的推广投资8千万美元到1亿美元,以便抢摊在线广告市场。 与

  • Mysql查询一段时间记录

    2011-2-2 2:24:00

    原文地址:http://www.cnblogs.com/legou/articles/1793341.html 24小时内记录(即86400秒) $ sql =SELECT vid

  • 非盈利组织免费用Google Earth Pro

    2007-6-28 23:42:00

    利性和公益组织,利用Google Earth的KML语言开发功能,创建自己基于...申请页面如果您对非盈利组织免费用Google Earth Pro有任何疑问要咨询,或者您对我们专家的解答有任何疑义

  • 传Google员工今年没有全体出游放假机会

    2009-6-15 21:45:00

    Google 是一家让无数人向往的梦幻公司,但像去年那样全体出游迪士尼乐园的欢乐在今年也许不会再有了(如下图,满眼望去迪士尼里全是 Google 人,matt Pagel拍摄),业界盛传他们今年不会

  • ADO 动态操作SQL数据库表

    2011-4-16 16:30:00

    这是一个通用的过程,功能是清空指定表中的数据,修改 SQL .Add(TRUNCATE TABLE +Table+ )中的 SQL 语句,就可以实现读写等功能。该功能使用了 通用数据库连接文

  • 怎么安装sql 2005

    2010-9-23 7:41:00

    windows server 2003 环境下 怎么安装sql 2005

  • 获取SQL Server日期而不包括时间的方法

    2011-4-20 10:00:00

    在本文中,GetDate()获得的日期由两部分组成,分别是今天的日期和当时的时间: Select GetDate() 用DateName()就可以获得相应的年、月、日,然后再把它们连接起来就可以了