我尝试使用PHP浏览客户的Microsoft SQL服务器数据库,但端口1433已关闭。挖掘我发现MSSQL可以在动态端口分配模式下运行,这意味着它将在首次执行时选择一个随机侦听端口,并且可能在启动时保持相同。我知道我可以找到当前端口,但由于可能 发现要连接的端口?
通过我的搜索可以理解,这项工作通常由SQLBrowser(.exe?)完成,但如何在Linux上完成?
而@ Chris'回答是正确的我错过了一个简单而重要的部分:每次更改odbc.ini都需要运行:
odbcinst -i -s -f /etc/odbc.ini
更新系统的DSN。 之后我可以使用
连接isql -v DSN_NAME username password
检查服务器实例:
tsql -H HOSTNAME_OR_IP -L
这将打印服务器信息,包括您应该能够使用标准telnet或mssql客户端连接的实例名称和端口。
答案 0 :(得分:1)
简短回答:
ODBC驱动程序知道在端口1434上联系SQL服务器以查找与命名实例关联的动态端口。用户SERVERNAME\INSTANCENAME
进行连接。
答案很长:
最终我找到了this:
如果您正在使用具有多个实例和动态端口的mssql 您可以使用以下分配:
[SQLServer2008] Description = Production Server Driver = TDS Trace = No Server = servername\instance_name TDS_Version = 8.0
似乎在类似的IBM Doc:
中得到了回应<强>问题强>
SQLServer设置为动态分配端口。在.odbc.ini文件中, Address参数通常设置为hostname冒号端口号 (Address = HostName:1433),但端口可能会更改。我们该怎么办? 这个?
<强>答案强>
对于Address参数值,而不是输入主机名 冒号端口,输入反斜杠和服务器实例的主机名 名。
例如,在Unix / Linux中,使用IBM SQLServer Wire Protocol驱动程序 并在DSN定义中的.odbc.ini文件中输入以下内容 用于连接SQLServer数据源:
地址=主机名\ Server_Instance_Name
对于Windows,请使用ODBC数据源管理员配置 使用IBM SQLServer Wire Protocol的数据源的系统DSN 驱动程序。
注意:参数是服务器
答案 1 :(得分:1)
鉴于你的答案是正确的,我不得不做一些小改动才能使它发挥作用。我决定在这里写。步骤基本相同。在Ubuntu / Debian上:
apt-get install php5-sybase unixodbc tdsodbc
修改/etc/odbcinst.ini
并添加驱动程序详细信息
[TDS]
Description = FreeTDS Driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
修改/etc/odbc.ini
并输入连接详情
[SQLSRV01]
Description = SQL Server test
Driver = TDS
Trace = No
Server = SERVER_IP\INSTANCE_NAME
TDS_Version = 9.0
#Database = DataBaseName
#ReadOnly = Yes
最后两个参数是可选的。 驱动程序必须与我们在odbcinst.ini中编写的内容相匹配。 服务器指令必须采用该语法(当然 SERVER_IP 也可以是主机名)。
根据UnixODBC的说法,下一步不应该是必要的,但这就是我的安装工作的原因。运行以下命令(每次更改odbc.ini时)
odbcinst -i -s -f /etc/odbc.ini
在此之后,您应该可以使用以下方式进行连接:
isql -v SQLSRV01 nome_utente password
或通过PHP:
$db = new PDO("dblib:host=SQLSRV01;dbname=DBNAME","USERNAME","PASSWORD");