SQL Query-DDL or DML

本文关键字:DML or Query-DDL SQL | 更新日期: 2023-09-27 18:15:10

我有一个关于识别SQL查询类型的查询,通过它我想弄清楚是否有任何DDL语句正在执行。

是否有任何c# API可用来识别SQL查询类型是DDL还是DML?

SQL Query-DDL or DML

在c#中,这是不可能的,除非使用devio提出的解析方法。

只允许DML语句被执行,你应该使用内部数据库安全机制。例如,将所有DDL移动到存储过程中,并将"grant exec"授予admin。

您的问题是指代码分析还是执行分析?

在代码中,查找CREATE, ALTER和DROP语句(取决于您的数据访问层)

对于执行分析,您可以创建DDL触发器。

UPDATE注释后

看了你的评论后,我认为最好的解决方案是使用SQL Server的权限系统来限制交互用户的能力。

创建数据库或应用程序角色,为该角色分配用户,并选择用户/角色所需的授予。在这个新用户的上下文中运行交互式SQL语句。

这样可以设置每个表/视图/sp等的权限。和每个命令(SELECT/INSERT等),而不需要解析SQL语句

运行这段代码,在它的最后,您将得到所有DDL匹配的摘要。每次都很完美!!

    string matchedSQL;
    //Parse DDL statements
    Regex DDL = new Regex(@"(?<='b(create|alter|drop)'s+(procedure|proc|table|trigger|view|function)'b's'[dbo'].)'[.*?']", RegexOptions.IgnoreCase);
    Match match = DDL.Match(script);
    while (match.Success)
    {
         matchedSQL += match.Groups[1].Value + " " + match.Groups[2].Value + " " + match.Value;
        match = match.NextMatch();
    }