【问题标题】:JDBC password encryption in SQL Anywhere 16SQL Anywhere 16 中的 JDBC 密码加密
【发布时间】:2016-07-21 14:48:36
【问题描述】:

谁知道在 ConnectionString 中加密密码的好方法?

当我使用 sybase/sap 工具正常运行时,我可以连接 dbisql.exe @encrypted_config_file.cfg

在 encrypted_config_file.cfg 中存储了有关服务器名称、用户和密码的信息。然后我可以用 dbhide.exe 加密这个文件。 现在只有数据库服务器可以连接而不告诉用户真正的密码。

现在任何人都可以在 java 或 C 中使用类似的解决方案,但在连接字符串中作为选项或参数

--using jconn3.jar 
DriverManager.registerDriver((Driver) Class.forName( "com.sybase.jdbc3.jdbc.SybDriver" ).newInstance() ); 
con = DriverManager.getConnection("jdbc:sybase:Tds:HOSTNAME:PORT?ServiceName=Servername", "USER", "PASSWORD");

【问题讨论】:

    标签: java encryption jdbc connection-string sqlanywhere


    【解决方案1】:

    来自Sybase info-center site,看来您需要执行以下操作:

    String url = "jdbc:sybase:Tds:myserver:3697";
    Properties props = new Properties();
    props.put("ENCRYPT_PASSWORD ", “true”);
    props.put("JCE_PROVIDER_CLASS",
    "org.bouncycastle.jce.provider.BouncyCastleProvider");
    
    /* Set up additional connnection properties as needed */
    props.put("user", "xyz");
    props.put("password", "123");
    
    /* get  the connection */
    Connection con = DriverManager.getConnection(url, props);
    

    希望这会有所帮助。

    【讨论】:

    • 这段代码似乎是用于将加密密码从客户端“传输”到服务器。
    • 我正在寻找像 .properties 这样的外部解决方案,但已加密。在上面的java代码中,任何有一点点知识的人都可以“提取”jar存档并解密,或者只需读取明文密码即可登录数据库。
    • 是的,看来您需要在 Java 中创建一个二进制文件,然后您需要创建一个新的 Java 类(比如说 DataSourceInfo)来加密纯文本并将其存储在二进制文件中.之后(在初始化连接时),您需要使用 DataSourceInfo 类获取必要的信息,例如用户名/密码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2016-10-28
    • 2020-01-18
    • 2013-08-14
    • 1970-01-01
    相关资源
    最近更新 更多