屏蔽来自 odbcDriverConnect 的密码

Mask password from odbcDriverConnect

我想在我的脚本中隐藏我的密码和用户名。有如何做到这一点的例子,例如这里: 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 使用连接字符串,因此如何将附加功能放入其中。

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

但是,实际上根本不需要传递连接字符串,如果使用 appropriate connection function (but this doesn’t provide quite the same kind of flexibility; 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)