【问题标题】:How do I make a read-only "Connect to ODBC" connection in SAS Proc SQL?如何在 SAS Proc SQL 中建立只读“连接到 ODBC”连接?
【发布时间】:2021-12-12 06:13:26
【问题描述】:

我正在创建一个 SAS 宏函数,我的同事可以使用它通过 ODBC 连接使用 SAS Proc SQL 连接到各种数据库,以运行传递 SQL 代码。我希望连接是只读的,即使用户对数据库有写访问权。我可以在 LIBNAME 语句中执行此操作,使用 ACCESS=READONLY:

LIBNAME myLib ODBC NOPROMPT="DATABASE=myDB;Server=myServer;DRIVER={SQL Server};Trusted_Connection=Yes;" ACCESS=READONLY;

我可以像这样创建读写连接:

PROC SQL ;
  CONNECT TO ODBC AS myCon(NOPROMPT="DATABASE=myDB;Server=myServer;DRIVER={SQL Server};Trusted_Connection=Yes;")  ;
  EXECUTE( INSERT INTO myTable(myColumn) VALUES(1) ) BY myCon ; ** insert a row where myColumn=1;
QUIT;

但是在 Connect To ODBC () 中插入 ACCESS=READONLY 作为选项,例如 CONNECT TO ODBC AS myCon(ACCESS=READONLY NOPROMPT="DATABASE=myDB;Server=myServer;DRIVER={SQL Server};Trusted_Connection=Yes;") ;,会导致 ERROR: Invalid option name ACCESS。

我知道在连接字符串中没有任何内容可以使连接成为只读。有没有办法让这个Connect to ODBC ... 变成只读连接?

【问题讨论】:

    标签: sql sas connection odbc readonly


    【解决方案1】:

    首先,您可以使用 libname!

    proc sql;
      connect using mylib;
      ... sql stuff ...
    quit;
    

    其次,这将在 ODBC 初始化字符串中(所以在“引号”中),并且取决于您使用的驱动程序。现代 SQL 服务器驱动程序有ApplicationIntent=ReadOnly;参见例如this doc page for the v15 driver。我不知道旧的{SQL Server} 驱动是否支持。

    【讨论】:

    • 我尝试使用 LIBNAME mylib ODBC NOPROMPT="(odbc connection string)" ACCESS=READONLY ; 创建一个“只读”库名,但仍然能够写入数据库。我猜想没有 SAS 级别的方法来控制 ODBC 连接中的读写权限。 ApplicationIntent=ReadOnly; 方法在我的 {SQL Server} 驱动程序中不起作用。也许我可以让我们的 IT 部门更新服务器驱动程序。
    • 嗯,这可能是一个错误(或者至少是他们没有想到的问题)-connect using 相对较新,因此可能值得用 SAS 提高轨道。至少,您应该在日志中收到一条警告或注释,说明无法将连接设为只读!
    • 将写入“ACCESS=READONLY”库连接的直通代码示例是:LIBNAME mylib ODBC NOPROMPT="(odbc connection string)" ACCESS=READONLY; PROC SQL; CONNECT WITH mylib AS mycon; EXECUTE(CREATE TABLE sometable (some_count INT)) BY mycon; QUIT;
    猜你喜欢
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    相关资源
    最近更新 更多