在 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)
我在 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)