在MySql上是否可以选择所有用户?

时间:2013-11-23 01:35:01

标签: mysql

我的问题很简单,我是否可以授予所有权限(如任何来自任何计算机的pwd用户)?

  • 我知道在某些情况下可能会有问题。但我们的是一个演示数据库,用户不详。所以请把杆放在我们身上。

  • 据我所知和我所尝试的答案是否定的,我们不能这样做。我发布这个问题是为了证实我的理解。

AFAIK,我们不能。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

正如人们在评论中所说的那样 - 这可能是一个坏主意。但是,我想,为什么不解决问题,看看它是如何完成的。

最简单的起点是创建一个没有用户名的MySQL用户:

GRANT ALL ON *.* TO ''@'%' IDENTIFIED BY '';

这将允许您使用任何用户名登录 - 并输入空白密码。这可能是一些人正在寻找的 - 但听起来你想要任何用户名任何密码。

要做到这一点 - 我建议使用mysql-proxy。我会下载源代码。如果您使用的是Ubuntu,则需要以下软件包来构建它:

apt-get install libmysqlclient-dev \
    pkg-config \
    lua5.1 liblua5.1-0-dev liblua5.1-0 \
    libglib2.0-dev \
    libevent-1.4-2 libevent1-dev

如果你编译它,那么你需要以root身份运行/ sbin / ldconfig。

然后我们可以编写一个lua脚本来为每个连接设置用户名和密码。 mysql-proxy客户端有一些示例脚本,但相关的examples / tutorial-scramble.lua文件很旧,不适用于当前版本。您可以使用以下脚本:

local CLIENT_PROTOCOL_41       = 512    -- New 4.1 protocol
local CLIENT_SECURE_CONNECTION = 32768  -- New 4.1 authentication

local MYSQL_AUTH_CAPABILITIES  = ( CLIENT_PROTOCOL_41 + CLIENT_SECURE_CONNECTION )

local password = assert(require("mysql.password"))
local proto = assert(require("mysql.proto"))

function read_auth()
        local c = proxy.connection.client
        local s = proxy.connection.server

        local challenge = (s.scramble_buffer):sub(1,20)

        local default_username = "foo"
        local default_password = "bar"

        proxy.queries:append(1,
                proto.to_response_packet({
                        username = default_username,
                        response = password.scramble(challenge, password.hash(default_password)),
                        charset  = 8, -- default charset
                        database = c.default_db,
                        max_packet_size = 1 * 1024 * 1024,
                        server_capabilities = MYSQL_AUTH_CAPABILITIES
                })
        )

        return proxy.PROXY_SEND_QUERY
end

将此保存为any-user-any-pass.lua或其他内容。然后你需要在我在脚本中引用的数据库中创建用户(用户名foo,密码栏):

GRANT ALL ON *.* TO 'foo'@'localhost' IDENTIFIED BY 'bar';

然后我们可以启动mysql-proxy - 我们将它连接到端口3306上的本地mysql服务器,它将侦听端口3307.使用类似这样的命令:

mysql-proxy --proxy-lua-script=`pwd`/any-user-any-pass.lua \
    --proxy-backend-addresses=localhost:3306 \
    --proxy-address=localhost:3307

在另一个终端测试:

ubuntu@test:~$ mysql -h 127.0.0.1 -P 3306 -u ANYTHING -pSOMETHING
ERROR 1045 (28000): Access denied for user 'ANYTHING'@'localhost' (using password: YES)
ubuntu@test:~$ mysql -h 127.0.0.1 -P 3307 -u ANYTHING -pSOMETHING
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 752
Server version: 5.5.29-0ubuntu1 (Ubuntu)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| foo@localhost  |
+----------------+
1 row in set (0.00 sec)

mysql>

正如您所看到的 - 首先我测试直接连接到MySQL - 它拒绝任何/ SOMETHING凭据。然后我连接到3307上的MySQL代理,它让我直接进入,因为lua脚本正在更改连接使用的用户名和密码。