DCL-MYSQL

来源:互联网 发布:谷歌手机软件 编辑:程序博客网 时间:2024/05/17 20:33

权限分类:
USAGE       --无权限,只有登录数据库,只可以使用test或test_*数据库
ALL        --所有权限
select/update/delete/super/slave/reload --指定的权限
with grant option     --允许把自己的权限授予其它用户(此用户拥有建立账号的权限)

权限级别:
 1、*.*   --全库、全表(mysql.user)
 2、mysql.*  --mysql库下所有表(某库中的所有表)(mysql.db)
 3、mysql.user  --mysql库中user表(单表)(mysql.table_priv)
 4、mysql.user.host --mysql库中user表的host列(mysql.columns_priv)

用户权限:
 username@localhost
  1、username   --你被授予了什么权限
  2、username/password --账号密码
  3、localhost   --表示你可以在哪里登录(这里表示只能本机通过socket登录)
 
  user@localhost  --表示user只能在本地通过socket登录服务器
  user@192.168.0.1  --表示user用户只能在192.168.0.1登录数据库服务器
  user@192.168.0.0/255.555.255.0
       --指定某个子网的主机可以登录数据库
  user@%    --表示user用户能在所有的机器上登录数据库服务器

 

新建user02用户, 要求user02只能在本机登录而且对DB这个库的所有表拥有完全控制的权限:
mysql> grant all on DB.* to user02@'localhost' identified by '123';
mysql> select user,password,host from mysql.user;  --查看用户创建是否成功

更改user02在所有机器上都能登录数据库.
mysql> update mysql.user set host='%' where user='user02';
mysql> flush privileges;

 

让user02可以把自己的权限授予其它用户:
mysql> grant ALL on DB.* to user02@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)


查看权限:
mysql> show grants; --查看自己的权限
mysql> show grants for user02@'%'; --查看指定用户的权限


权限的作用范围(*.* database.* database.table)
mysql> grant select,update on DB.t3 to user04@'localhost' identified by '123';

列的授权:
mysql> grant update (user) on mysql.user to user03@'%';
mysql> grant update (user,host,password) on mysql.user to user03@'%';

权限的保存位置:
mysql.user   --所有mysql用户的账号和密码,以及对用户对全库全表权限(*.*)
mysql.db    --非mysql库的授权都保存在此(db.*)
mysql.table_priv  --某库某表的授权(db.table)
mysql.columns_priv  --某库某表某列的授权(db.table.col1)
mysql.procs_priv  --某库存储过程的授权


------------------
revoke
REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost'; --撤消指定的权限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ... --撤消所有的权限

mysql> drop user user02;  --撤消所有权限后把用户一并删除
Query OK, 0 rows affected (0.00 sec)


-----------------
忘记root密码的操作:

mysql的用户验证逻辑:
mysqluser-->mysqld(3306/scoket)-->(host/user/password)-->mysql.user


1、关闭正在运行的mysql服务器
2、重新启mysql,但启动的过程让mysql跳过用户验证(mysql.user),然后改密码
3、安全关闭mysql,然后再启动,这样密码就被重置了。
# service mysql stop 或 pkill -9 mysql
# cd /opt/mysql-glibc
# /opt/mysql-glibc/bin/mysqld_safe --defaults-file=/data2/my.cnf --skip-grant-tables &
mysql> update mysql.user set password=password('147258369') where user='root';
# mysqladmin shutdown
# /opt/mysql-glibc/bin/mysqld_safe --defaults-file=/data2/my.cnf &

0 0