2011-02-07 136 views
0

我目前通过$_SESSION['connection'] = odbc_connect('Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=mysql;Option=3;', 'root', '');如何允许远程访问我的数据库?

访问数据库除了fromt的事实,我需要得到一个密码放在该帐户(甚至使用另一个帐户不是root?而且很可能改变DATABSE的名字吗?),我想编写一些代码,我可以不费吹灰之力地安装在几个站点上。

我想在每个站点使用相同的代码,但我不能提前知道IP地址。我该如何解决这个问题?我只是告诉他们的IT人员在odbc_connect()调用中设置类似myDatabaseServer的DNS链接,然后用Server=myDatabaseServer替代Server=localhost?或者我需要在Windows控制面板中使用ODBC管理器进行一些操作?

嗯,我也许应该混淆或ditributing之前COMPLE代码...


更新:我发现this question该说

In your MySQL configuration file (my.cnf), you need the following at least: 
port   = 3306   # Port MySQL listens on 
bind-address = 192.168.1.15 # IP address of your server 
# skip-networking   # This should be commented out to enable networking 

我推测bind-address coudl是myDatabaseServer,所以我不需要编辑每个远程站点的配置文件(?)

它也表示GRANT ALL ON test.* TO 'root'@'192.168.1.15' IDENTIFIED BY '';因此,是一个必须在数据库上运行一次的命令?但我无法预先知道IP地址?事实上,多个用户可能需要访问 - 我可以通配符到192.168。 ?真的,真的需要吗?有没有什么方法可以配置一次,不知道每个用户将使用哪个网络地址范围(我知道它听起来不安全,但我可以授予每个人的访问权并依赖密码保护,外加人员不会知道数据库在那里?)

+1

“甚至可能使用另一个帐户比根?” - 可爱...是的,锁定下来。 – ocodo 2011-02-07 03:45:01

+1

切勿从任何应用程序连接到数据库作为`root`,或永远不允许从任何主机(除`localhost`)连接作为`root`作为生产级数据库;而是创建另一个用户。 – 2011-02-07 03:56:26

+0

+1。是的我知道 ...我只是用root进行开发。别担心,我会锁定它。 – Mawg 2011-02-07 05:58:39

回答

1

bind-address只能设置为IP地址,而不是域名,并且引用mysql服务器将绑定到的传出IP地址。

然而,外部连接时,你总是可以只设置bind-address0.0.0.0这样MySQL服务器会接受它可以访问任何界面上输入的3306个连接。管理员会在给服务器命名后监视,并且可以通过该名称连接到它。

一旦设置正确,您只需要设置适当的用户凭据,以便外部用户可以从给定IP(或模式)进行连接。

例如

GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY "PASSWORD"; 

See here对于外部IP模式。

当然,你应该使用一般的有限接入帐户,并只允许访问特定的数据库/表

1

只需添加到Slomojo的准确的答案(DB *通常是可以接受的。):不要忘记在对特权进行任何更改后,在mysql中输入flush privileges;