当前位置 > 首页 > 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)

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



  • SQL2000无法访问的解决办法

    2010-10-13 6:01:00

    一看ping服务器IP能否ping通。这个实际上是看和远程sqlserver2000服务器的物理连接是否存在。假如不行,请检查网络,查看配置,当然得确保远程sqlserver2000服务器的IP拼写

  • Google:YouTube过滤系统即将上线

    2007-4-21 11:55:00

    ...我们即将启动这一过滤系统。2006年10月,Google以价值16.5亿美元 的股票收购了...时代华纳等公司呼吁美国反垄断监管部门严格审查这一交易,因为收购DoubleClick之后,Goo

  • 【SQL】SQL索引后面的随机数具体作用?

    2012-2-14 13:27:00

    我想问一下 sql索引后面都会有个随机数 ,请问下高手这个随机数具体作用什么?到底从哪里来的?为什么我建里的时候没有呢?请指教,谢谢! 煜诚海参专卖 淘宝店铺:http://jinweb.taob

  • 总结:Google遭受攻击的五大技术特点

    2010-1-29 15:01:00

    近日,McAfee公司指出,攻击 Google 的黑客使用了前所未有的战术,组合了加密、隐秘编程技术和IE中的未知漏洞,意图是窃取 Google 、Adobe和许多其他大公司的源代码。 1、黑客攻

  • How to install a EdgeSight Server after rename a SQL2005 server.

    2011-1-5 16:06:00

    ? 1. A. For a renamed computer that hosts a default instance of SQL Server, run the following

  • 商业周刊:Google在线广告业务仍未摆脱低迷

    2009-7-21 3:12:00

    Google 日前发布2009财年第二季度财报,季度营收达到55.2亿美元,同比增长3%。在当日盘后交易中, Google 股价上涨1%,报收于每股442.60美元。投资者普遍认为, Google

  • mysql存储过程学习笔记--php应用

    2011-8-27 7:46:00

    点烟看寂寞燃烧 孤单了,点支香烟,静静的看着它在指尖燃烧殆尽. 烟之点燃,是为了燃烧一切的寂寞. 连接数据库 <?php $mysqli = new mysqli("lo

  • mysql主从一些更新

    2011-3-3 17:59:00

    relay-log.info relay-log.info文件存在于slave的var目录,记录了slave执行binlog文件情况的信息。 从mater的mysql-bin.000003发送信息

  • MySQL的绕过注入过滤网

    2011-8-28 1:06:00

    ?This week I presented my experiences in SQLi filter evasion techniques that I have gained during 3

  • SQLServer2008列名无效

    2011-12-28 23:33:00

    在SQLServer2008中,当我设计(修改)表后,写SQL语句时可以执行通过,但列名会显示无效?!是怎么回事? 如图: