屏蔽来自odbcDriverConnect的密码

时间:2019-07-03 11:40:00

标签: r rodbc

我想从脚本中屏蔽密码和用户名。举例说明如何执行此操作这里: https://db.rstudio.com/best-practices/managing-credentials/

但是,我无法通过脚本设置使用它。

试图使用密钥环,但无法使其正常工作。

conn <- odbcDriverConnect("Driver=ODBC Driver 13 for SQL Server;
                           server=XXX,1433;
                           database=XXX;
                           uid=Needtohide;
                           pwd=Needtohide")

此代码将我连接到我的数据库。我必须使用RODBC,否则由于数据排序,SQL表将不会后退。我想修改脚本以隐藏用户名或至少密码。谢谢

我收到一个无法连接的错误

conn <- odbcDriverConnect("Driver=ODBC Driver 13 for SQL Server; server=XXX,1433; database=XXX; uid=myuserID; pwd=key_get('DB', 'myuserID')")

所有解决方案的主要问题是RODBC使用连接STRING,因此如何在其中添加附加功能。

1 个答案:

答案 0 :(得分:1)

您需要阅读有关字符串操作的基础知识。

但是,如果您使用appropriate connection function,则实际上根本不需要传递连接字符串(但这并不能提供完全相同的灵活性; ODBC bindings for DBI可能是一种补救)。我强烈建议您这样做,而不是手动操作连接字符串,因为它更清洁。

但是出于讨论的目的,您实质上有三种选择来构造连​​接字符串:

  1. 使用paste0

    conn_str = paste0(
        'Driver=ODBC Driver 13 for SQL Server; server=XXX,1433; database=XXX; ',
        'uid=myuserID; pwd=', key_get('DB', 'myuserID')
    )
    
  2. 使用sprintf

    conn_str = sprintf(
        'Driver=ODBC Driver 13 for SQL Server; server=XXX,1433; database=XXX; uid=myuserID; pwd=%s',
        key_get('DB', 'myuserID')
    )
    
  3. 使用软件包{glue}中的glue

    conn_str = glue('Driver=ODBC Driver 13 for SQL Server; server=XXX,1433; database=XXX; uid=myuserID; pwd={key_get("DB", "myuserID")}')
    

在所有情况下,您都将呼叫odbcDriverConnect(conn_str)