【问题标题】:Why does the connection to ASE fail when password encryption is required?为什么需要密码加密时与 ASE 的连接会失败?
【发布时间】:2013-03-14 12:54:08
【问题描述】:

如何对从 PHP 到 Sybase ASE 的数据库服务器连接进行密码加密?

net password encryption reqd = 1 时 PHP 与 ASE 的连接失败。

我们如何通过密码加密与 ASE 建立 PHP DB 连接?是否有需要在客户端连接上设置 PHP 关键字或参数?

【问题讨论】:

  • 我多年来一直在 PHP 中使用 Sybase,但我从未见过任何方法可以满足您的要求
  • 我在这里ccit.college.columbia.edu/knowledgebase/article/… 遇到了这个帖子,可能是一个可能的解决方案
  • 这是 Sybase 支持人员所说的。您可以通过使用 ocs.cfg 文件来解决该问题。在您的 $SYBASE/OCS-15_0/config 目录中,有一个 sample.cfg 文件。 vi sample.cfg 文件并将这一行添加到默认部分 [DEFAULT] CS_SEC_ENCRYPTION = CS_TRUE 这可能有效。如果应用程序正在传递名称,您将创建一个新部分 [应用程序名称] CS_SEC_ENCRYPTION = CS_TRUE Sybase 人员还说您应该使用至少 Sybase 版本 15.7。
  • 我建议您将您写的内容作为完整的答案重复一遍,您可能会得到一些应得的积分,并且遇到相同问题的人更容易获得您的答案。回答自己的问题是可以的,只要这不是收集学分的伎俩。
  • 对不起,不是信用积分,而是信誉积分(或投票)

标签: php sap-ase


【解决方案1】:

以下是解决此问题的方法,即能够从具有 PHP 版本 5.3.6 和 Sybase CTISQL Utility/15.7/P-EBF19975 ESD #3/DRV.15.7.0.3 的 Sybase 驱动程序的 Linux 64 位基础机器进行连接。虽然我们得到了这个工作,但除此之外,我们还需要 Apache 工作,我希望 Sybase 支持能够帮助我们解决这个问题,以及他们为我们的问题提供以下解决方案。我在这里发布这个是为了每个人都受益。注意:AFAICT,这不是 Sybase 支持的解决方案。请自行承担风险。

需要做的事情很少:

  1. 我使用的是最新的 Debian Stable 6.05 压缩 64 位
  2. 我已经安装了从 Sybase 下载的 ebf19977(带有开放客户端的开发工具包,是的,数字是关闭的,这不是错误,你会看到它)从 Sybase 下载的
  3. 从 php.net 网站下载 PHP 5.3.6 以从源代码编译。

第 1 步) 我认为应该可以轻松设置。确保您有 sudo 访问权限

第 2 步) 要安装开发工具包,您需要输入 setup.bin 文件所在位置的完整路径,如输入 sudo /home/btran/ebf19977/setup.bin ,这将开始设置,几乎按照那里的说明安装 OpenClient 及其相关工具。确保已安装 Open Client 和 PHP 库。

完成安装后,还需要执行一些其他步骤:

通过在 /opt/sybase 的根目录中执行 SYBASE.sh 来设置所有 Sybase 环境变量

sudo cat /opt/sybase/SYBASE.sh >> /etc/profile , if necessary source /etc/profile

这将设置大部分变量,但您需要添加几个不存在的变量:

    PHPRC=/opt/sybase/OCS-15_0/config
    LD_LIBRARY_PATH=/opt/sybase/OCS-15_0/php/php536_64/lib:/opt/sybase/OCS-15_0/lib

您的 /ect/profile 应该如下所示:

    # ------------------------------------
    #    Sybase Product Environment variables
    # ------------------------------------
    SYBASE="/opt/sybase"
    export SYBASE
    SYBASE_OCS="OCS-15_0"
    export SYBASE_OCS
    INCLUDE="/opt/sybase/OCS-15_0/include":$INCLUDE
    export INCLUDE
    LIB="/opt/sybase/OCS-15_0/lib":$LIB
    export LIB
    PATH="/opt/sybase/OCS-15_0/bin":$PATH
    export PATH
    LD_LIBRARY_PATH="/opt/sybase/OCS-15_0/php/php536_64/lib:/opt/sybase/OCS-15_0/lib:/opt/sybase/OCS-15_0/lib3p64:/opt/sybase/OCS-15_0/lib3p":$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH

    PHPRC="/opt/sybase/OCS-15_0/config"
    export PHPRC

    JAVA_HOME="/opt/sybase/jre32"
    export JAVA_HOME

    RIBO_HOME="/opt/sybase/jutils-3_0/ribo"
    export RIBO_HOME
    # ------------------------------------

然后,您还需要对位于根目录 /opt/sybase 的接口文件进行修改,使其看起来像这样,请不要使用它,使用您的信息:

    dev
        master tcp ether dev.company.com 4425
        query tcp ether dev.company.com 4425

    prod
        master tcp ether prod.company.com 4425
        query tcp ether prod.company.com 4425

    ribo
        master tcp ether testhost.company.com 5005
        query tcp ether testhost.company.com 5005

您还需要修改 ocs.cfg 以正确启动 PHP,它位于文件夹 /opt/sybase/OCS-15_0/config 中,如下所示:

    ;;;;;;;;;;;
    ; This is the default external configuration definition file. Feel free
    ; to add your own customizations.
    ;
    [DEFAULT]
    ; This is the default section loaded by applications that use
    CS_SEC_ENCRYPTION = CS_TRUE
    [ANSI_ESQL]
    ; This section defines configuration which an ANSI conforming
    CS_CAP_RESPONSE = CS_RES_NOSTRIPBLANKS
    CS_EXTRA_INF = CS_TRUE
    CS_ANSI_BINDS = CS_TRUE
    CS_OPT_ANSINULL = CS_TRUE
    CS_OPT_ANSIPERM = CS_TRUE
    CS_OPT_STR_RTRUNC = CS_TRUE
    CS_OPT_ARITHABORT = CS_FALSE
    CS_OPT_TRUNCIGNORE = CS_TRUE
    CS_OPT_ARITHIGNORE = CS_FALSE
    CS_OPT_ISOLATION = CS_OPT_LEVEL3
    CS_OPT_CHAINXACTS = CS_TRUE
    CS_OPT_CURCLOSEONXACT = CS_TRUE
    CS_OPT_QUOTED_IDENT = CS_TRUE
    ; End of default sections

    [isql]
    CS_SEC_ENCRYPTION = CS_TRUE

    [PHP]
    CS_SEC_ENCRYPTION = CS_TRUE

    ; This is a sample section showing how you might alter configuration
    ; properties for you Embedded SQL application.
    [SAMPLE_ESQL]
    ; use most of the ANSI properties defined above
    include = ANSI_ESQL
    ; but override some default properties
    CS_OPT_CHAINXACTS = CS_FALSE ; run in autocommit mode
    ;;;;;;;;;

注意:检查php.ini文件在同一目录下是否存在非常关键/opt/sybase/OCS-15_0/config(这里指向exention文件,查看环境变量LD_LIBRARY_PATH="/opt/sybase/OCS-15_0/php/php536_64/lib

你的 php.ini 应该是这样的:

    extension=/opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so

步骤 3) 从源代码编译 PHP,再次 Sybase 调用 64 位。

我将源代码下载到 /opt/php-5.3.6,以便与大多数 Linux 应用程序安装位置保持一致。

    cd to /opt/php-5.3.6 

    ./configure  

非常重要要注意,这是我们遇到障碍的地方,如果我选择任何其他配置选项而不是默认的 ./configure,PHP 将无法加载并出现以下错误:

btran@sls-baonix:/opt/php-5.3.6$ php ~/test-dev.php
PHP Warning:  PHP Startup: Unable to load dynamic library
'/opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so' -
/opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so: undefined
symbol: executor_globals in Unknown on line 0

Fatal error: Call to undefined function sybase_connect() in
/home/btran/test-dev.php on line 10
]

我们需要其他选项的原因是我们也需要它来与 Apache 一起工作。我们现在可以使用 PHP,但是我们需要能够从网站启动 PHP,所以依赖项是 PHP 除了支持 Sybase,还需要支持 Apache。如果有任何 PHP 专家对此有解决方案,请加入并帮助我们。

【讨论】:

    猜你喜欢
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2020-05-03
    • 2016-05-04
    • 2020-11-26
    相关资源
    最近更新 更多