我的SQL 5.6.31是在RHEL 7.2上设置的,如下所示:
我可以使用根用户帐户登录,如下所示:
mysql -u root -p
Enter Password:我创建了两个普通用户(一个通过命令行创建,一个通过基于PHP的应用程序创建)
通过命令行创建的
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';通过基于PHP应用程序创建的
我的PHP应用程序只是使用代码中的inserting命令将用户名插入数据库(数据库名: practiceDB)。例如,创建并存储到数据库中的普通用户名为peter。
当我使用用户名jeffery和密码mypass从命令行登录到mysql时,如下所示:
mysql -u jeffery -pmypass 然后运行命令show databases,我可以看到我的practiceDB和其他默认的MySQL数据库,比如information_schema。
由于其中一个普通用户(peter)是由webapp创建并驻留在数据库(practiceDB)中的,所以我尝试从命令行访问用户,而不使用任何密码,如下所示:
mysql -u peter我可以进入mysql命令提示符。实际上,不要在上面的命令行中指定现有的用户名peter。即使我指定了任何东西,我也可以进入命令提示符。另外,当我检查show databases时,我只看到了information_schema数据库,这不是我的用户存储的地方。
有人能告诉我为什么会这样吗?
发布于 2017-01-23 23:00:28
当您使用CREATE USER时,它所做的就是将一行添加到mysql.user中,主机设置为localhost,user设置为jeffrey或peter,并填充密码列。所有DB特权都默认为'N'。
连接时,运行以下命令:
SHOW GRANTS;它只会简单地说GRANT USAGE。这意味着你可以连接,没有其他的!
当您以root身份登录时,现在必须显式地告诉mysqld在各个级别授予权限。
示例
这将让杰弗里做任何事,除了放弃他的特权。
GRANT ALL PRIVILEGES ON *.* to 'jeffrey'@'localhost';这会让杰弗里做任何事,包括放弃他的特权。
GRANT ALL PRIVILEGES ON *.* to 'jeffrey'@'localhost' WITH GRANT OPTION;这将让jeffrey在一个名为jeff的数据库中完成所有事情。
GRANT ALL PRIVILEGES ON jeff.* to 'jeffrey'@'localhost';下次以root身份登录时,运行以下命令
DESC mysql.user;
DESC mysql.db;这将向您展示全局(mysql.user)和数据库(mysql.db)特权是什么样的。
https://dba.stackexchange.com/questions/162019
复制相似问题