在 Genexus beforeConnect 过程中隐藏密码

Hide password in Genexus beforeConnect procedure

我在 Genexus 中使用 BeforeConnect 选项。我把这段代码放在一个过程中...

&UserID = &websession.Get("db")

//select the Database depending on websession 
Do Case
   Case &UserID = "1" 
        &DataBase  = "CambioDB1" 
   Case &UserID = "2" 
        &DataBase  = "CambioDB2" 
   Otherwise 
        &DataBase  = "CambioDB1" //default database 
EndCase

//Change connection properties 
&dbconn = GetDatastore("Default") 
&dbconn.UserName = 'username' 
&dbconn.UserPassword = 'password'
&dbconn.ConnectionData = "DATABASE=" + &DataBase.Trim() //SQLServer 

...设置 BeforeConnect 属性 并且有效。

但是如何避免将数据库的密码放在代码中? 我想用一个文件来读取,但无论如何它都是一个未加密的密码。

我该如何解决这个问题?有什么方法可以解决这个问题,还是我必须冒险输入明文密码?

尼古拉,

您可以使用 ConfigurationManager 从标准配置文件中读取值(client.cfg 对于 Java,web.config 对于 .net)。

&我的密码=ConfigurationManager.GetValue('MY_PASSWORD')

使用密码向您的配置文件添加一个值。 例如: MY_PASSWORD=我的数据库密码

您可能想保存加密的密码以获得额外的安全层。 简单的: &EncPass = Encrypt64(&密码, &SysEncKey)

更强的加密: https://wiki.genexus.com/commwiki/servlet/wiki?42682,Symmetric+Stream+Encryption

&EncPass = &SymmetricStreamCipher.DoEncrypt(symmetricStreamAlgorithm, key, iv, plainText)