共计 3150 个字符,预计需要花费 8 分钟才能阅读完成。
丸趣 TV 小编给大家分享一下 MySQL 中权限系统的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
create user liub @ localhost identified by liub
create table g_user(
id varchar(10),
username varchar(20),
userpwd varchar(20)
);
insert into g_user values (1 , liub , liub
insert into g_user values (2 , lik , lik
mysql.user
mysql.db
mysql.tables_priv
mysql.columns_priv
www.2cto.com
select * from g_user;
— 列级权限
grant select(id,username) on g_user to liub @ localhost
— 表级权限
grant select on g_user to liub @ localhost
— 库级权限
grant select on test.* to liub @ localhost
show grants for liub @ localhost
select * from columns_priv
select * from tables_priv
select * from db
use test www.2cto.com
grant insert on g_user to liub @ localhost
select * from mysql.user
flush privileges;
show grants for liub @ localhost
MySQL 的权限系统在实现上比较简单,相关权限信息主要存储在几个被称为 grant tables 的系统表中,即:mysql.User,mysql.db,mysql.Host,mysql.table_priv 和 mysql.column_priv。由于权限信息数据量比较小,而且访问又非常频繁,所以 Mysql 在启动的时候,就会将所有的权限信息都 Load 到内存中保存在几个特定的结构中。所以才有我们每次手工修改了权限相关的表之后,都需要执行 FLUSH PRIVILEGES 命令重新加载 MySQL 的权限信息。当然,如果我们通过 GRANT,REVOKE 或者 DROP USER 命令来修改相关权限,则不需要手工执行 FLUSH PRIVILEGES 命令,因为通过 GRANT,REVOKE 或者 DROP USER 命令所做的权限修改在修改系统表的同时也会更新内存结构中的权限信息。在 MySQL5.0.2 或更高版本的时候,MySQL 还增加了 CREATE USER 命令,以此创建无任何特别权限(仅拥有初始 USAGE 权限)的用户,通过 CREATE USER 命令创建新了新用户之后,新用户的信息也会自动更新到内存结构中。所以,建议读者一般情况下尽量使用 GRANT,REVOKE,CREATE USER 以及 DROPUSER 命令来进行用户和权限的变更操作,尽量减少直接修改 grant tables 来实现用户和权限变更的操作。
show grants for income @ %
Global Level
GRANT SELECT,UPDATE,DELETE,INSERT ON *.* TO def @ localhost
在验证所有所需权限的时候,MySQL 首先会查找存储在内存结构中的权限数据,首先查找 Global Level 权限,如果所需权限在 Global Level 都有定义(GRANT 或者 REVOKE),则完成权限校验(通过或者拒绝),如果没有找到所有权限的定义,则会继续往后查找 Database Level 权限,进行 Global Level 未定义的所需权限的校验,如果仍然没有能够找到所有所需权限的定义,MySQL 会继续往更小范围的权限定义域查找,也就是 TableLevel,最后则是 Column Level 或者 Routine Level。 www.2cto.com
一, 创建用户:
命令:CREATE USER username @ host IDENTIFIED BY password
说明:username – 你将创建的用户名, host – 指定该用户在哪个主机上可以登陆, 如果是本地用户可用 localhost, 如果想让该用户可以从任意远程主机登陆, 可以使用通配符 %. password – 该用户的登陆密码, 密码可以为空, 如果为空则该用户可以不需要密码登陆服务器.
例子: CREATE USER dog @ localhost IDENTIFIED BY 123456
CREATE USER pig @ 192.168.1.101 IDENDIFIED BY 123456
CREATE USER pig @ % IDENTIFIED BY 123456
CREATE USER pig @ % IDENTIFIED BY
CREATE USER pig @ %
二, 授权:
命令:GRANT privileges ON databasename.tablename TO username @ host
说明: privileges – 用户的操作权限, 如 SELECT , INSERT , UPDATE 等. 如果要授予所的权限则使用 ALL.;databasename – 名,tablename- 表名, 如果要授予该用户对所有数据库和表的相应操作权限则可用 * 表示, 如 *.*.
例子: GRANT SELECT, INSERT ON test.user TO pig @ %
GRANT ALL ON *.* TO pig @ %
注意: 用以上命令授权的用户不能给其它用户授权, 如果想让该用户可以授权, 用以下命令:
GRANT privileges ON databasename.tablename TO username @ host WITH GRANT OPTION;
www.2cto.com
三. 设置与更改用户密码
命令:SET PASSWORD FOR username @ host = PASSWORD(newpassword 如果是当前登陆用户用 SET PASSWORD = PASSWORD( newpassword
例子: SET PASSWORD FOR pig @ % = PASSWORD(123456
四. 撤销用户权限
命令: REVOKE privilege ON databasename.tablename FROM username @ host
说明: privilege, databasename, tablename – 同授权部分.
例子: REVOKE SELECT ON *.* FROM pig @ %
注意: 假如你在给用户 pig @ % 授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO pig @ % , 则在使用 REVOKE SELECT ON *.* FROM pig @ % 命令并不能撤销该用户对 test 数据库中 user 表的 SELECT 操作. 相反, 如果授权使用的是 GRANT SELECT ON *.* TO pig @ % 则 REVOKE SELECT ON test.user FROM pig @ % 命令也不能撤销该用户对 test 数据库中 user 表的 Select 权限. www.2cto.com
具体信息可以用命令 SHOW GRANTS FOR pig @ % 查看.
五. 删除用户
命令: DROP USER username @ host
以上是“MySQL 中权限系统的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!