【问题标题】:How to use escape character in password containing "="?如何在包含“=”的密码中使用转义字符?
【发布时间】:2016-02-23 10:31:48
【问题描述】:

我正在为部署在 jboss 服务器中的应用程序使用 microsoft sql 数据库。数据库密码包含_i9wexp=tfd。 此密码在普通的 java 类方法和我的本地 jboss dev studio 数据源配置中运行良好

我在本地 jboss 独立 xml 文件中的数据源配置

 <datasource jndi-name="java:jboss/datasources/Star-DS" pool-name="Star-DS" enabled="true" use-java-context="true">
          <connection-url>jdbc:sqlserver://server_name;DatabaseName=DB_NAME</connection-url>
          <driver>sqljdbc</driver>
          <security>
                    <user-name>DB_USER_NAME</user-name>
                    <password>_i9wexp=tfd</password>
          </security>
  </datasource>

这在连接服务器数据库的本地开发中工作正常。但是当从部署应用程序的 jboss 服务器连接并从下面的 datasource.properties 文件中指向数据库连接时:

connection-url=jdbc:sqlserver://server_name;DatabaseName=DB_NAME
jndi-name=java:jboss/datasources/Star-DS
driver-name=custom.mssql.default
user=DB_USER_NAME
password=_i9wexp=tfd

当我部署应用程序并在浏览器中打开应用程序时,我在日志中收到以下错误:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'DB_USER_NAME'. ClientConnectionId:62fc2ccd-9af6-4c3d-872c-eeb5376204bc
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
    at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254)
    at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2926)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2243)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:42)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2229)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1716)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1327)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:992)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:828)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
    at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:296)
    ... 28 more

09:40:38,508 WARN  [org.hibernate.engine.jdbc.internal.JdbcServicesImpl] (ServerService Thread Pool -- 60) HHH000342: Could not obtain connection to query metadata : javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:jboss/datasources/Star-DS
09:40:38,512 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 60) MSC000001: Failed to start service jboss.persistenceunit."star.ear/starWeb.war#Star": org.jboss.msc.service.StartException in service jboss.persistenceunit."star.ear/starWeb.war#Star": javax.persistence.PersistenceException: [PersistenceUnit: Star] Unable to build EntityManagerFactory
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:103)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_60]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_60]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_60]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final-redhat-1.jar:2.1.1.Final-redhat-1]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: Star] Unable to build EntityManagerFactory
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:924)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:899)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:76)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:200)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$600(PersistenceUnitServiceImpl.java:57)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:99)
    ... 4 more
Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:98)
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:68)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:170)
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:85)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:184)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:156)
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1825)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1783)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
    ... 9 more

它也成功登录了sql server management studio。

通过应用程序连接数据库时如何使用转义字符访问此密码?

我尝试过使用_i9wexp\=tfd 的类似方法,但也失败了。谁能帮我解决这个问题?

【问题讨论】:

标签: sql-server jboss passwords escaping character


【解决方案1】:

尝试将密码放在大括号中。所以如果你的密码是_i9wexp=tfd,试试

...;password={_i9wexp=tfd}

如果您的密码包含右大括号},则必须通过将它们加倍另外对其进行转义:

abcd;{} => {abcd;{}}}

我们看到在开头添加了一个{,在末尾添加了一个},并且在密码内容中也看到了转义的}(而密码中的左大括号保持不变)。

花括号部分已经在这里以极好的方式进行了描述:https://stackoverflow.com/a/55151212/13249425

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多