我的问题很简单,我是否可以授予所有权限(如任何来自任何计算机的pwd用户)?
我知道在某些情况下可能会有问题。但我们的是一个演示数据库,用户不详。所以请把杆放在我们身上。
据我所知和我所尝试的答案是否定的,我们不能这样做。我发布这个问题是为了证实我的理解。
答案 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脚本正在更改连接使用的用户名和密码。