zoukankan      html  css  js  c++  java
  • Mysql权限操作、用户管理、密码操作

    Mysql的权限

      mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表。

           mysql权限表的验证过程为:

    • 先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。
    • 通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证。

       即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;

       如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;

       如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。

      

    1.查询数据库的用户名,主机,密码

    mysql>select user,host,password from mysql.user;

    2.显示某个用户的授权命令

    mysql>show grants for rep@'%';

    3.赋予某个用户对库test进行select,insert,update,delete的权限的命令如下

    mysql>grant select,insert,update,delete on test.* to user01@'10.200.20.%' identified by '123';

     4.赋予备份整个实例权限的命令

    
    
    mysql>grant lock tables,reload,super,select,show view,trigger,process on *.* to backup@'localhost' identified by '123';

    5.赋予远程备份各个库权限的命令

    mysql>grant lock tables,select,show view,trigger,process  on *.* to backup@'10.200.20.18'   identified by '123';

    主从复制时,需要replication slave权限,

    查看复制的状态,需要replication client权限。

    6.给用户superuser赋予所有权限,并允许superuser用户也能将这些权限赋予其他用户

    mysql>grant all privileges on *.* to 'superuser'@'%' identified by '123'  with grant option;

     

    7.回收权限(不包括赋权权限)

    mysql> revoke all privileges on *.* from superuser; #superuser在修改后的下一次请求时,新权限才生效

    8.回收赋权权限 

    mysql>revoke grant option on *.* from superuser ;

     

     9.删除mysql用户

    mysql>drop user 'zhang'@'%';
    或
    mysql>delete from mysql.user where user='zhang' and host='%';
    mysql>flush privileges;

     10.对账户重命名

    mysql> rename user 'jack'@'%' to 'jim'@'%';

    Mysql的密码

    9.修改用户密码(使用mysqladmin命令修改)

    #mysqladmin -u root password 123456  #在root没有密码的情况下
    #mysqladmin -u root -p123456 password abcdef  #root有密码,(-p和密码要连在一起)
    #mysqladmin -u superuser -p123456 -h172.23.216.86  password abcdef  #superuser的host为%,不是localhost

    10.修改用户密码(使用set password命令修改)

    mysql>set password for user01@'10.200.20.%'=password('123456');

    11.修改用户密码(使用grant命令重新赋予用户连接密码)

    mysql>grant usage on test.* to user01@'10.200.20.%' identified by '123456';

    12.修改用户密码(使用命令直接修改系统表)

    mysql>update mysql.user set password=password('12345678') where user='user01' and host='10.200.20.%'
    mysql>flush privileges;

    授权小结:1.当mysqld启动时,所有的授权表被读到内存,并开始生效。当服务器注意到授权表被改变时,现存的客户端连接会收到如下影响。

      •  表和列的权限在客户端的下一次请求时生效。
      •  数据库的权限改变在下一个 USE db_name 命令时生效。
      •    全局权限的改变和密码的改变在下一次客户端连接时生效。

           2.grant,revoke或set password 命令对授权表进行修改,服务器会自动将授权表重新加载到内存。

          如果手动修改授权表(insert,update,delete),需要手动flush privileges。

           3.mysql的主机通配符‘%’不包括‘localhost’,‘localhost’和ip‘127.0.0.1’并不等同,如果使用“mysql -uroot -h localhost”,则默认会连接socket文件,

          如果使用“mysql -uroot -h 127.0.01”,则会连接 TCP端口。

    ---------------------------------------------------------------------------补充-------------------------------------------------------------------------

     

     一、创建用户时用grant和create user的区别

      mysql创建用户也有三种方法,上面只介绍到了grant,但是还可以用insert user表,create user的方法。

    create user 'zhangsan'@'10.200.20.%' identified by '123456';

    用户与@后主机分开 创建出来的用户:

    mysql>create user 'zhang@%' identified by '123456';

    用户与@后主机一致创建出来的用户:     (证明这种方法不可行,网上有的说用这种方法)

    为了确认用create user创建的权限,那么我们来show grant一下。

    mysql>show grants for 'zhang'@'%';

    usage表示只能连接登录,并没有实际其他权限。

    所有说create user这种方式创建出来的用户,只能连接一下数据库,还需继续用grant给用户进行授权。

    二、mysql的root密码忘记,找回

      1.先把mysql服务停掉

    #service mysqld stop    

     2.用mysqld_safe加参数--skip-grant-tables 启动,表示跳过授权表启动msyql

    #mysqld_safe --skip-grant-tables &

     

     3.登录mysql,这时候账号密码为空都可以登录

    #mysql -uroot

      4.修改root用户密码,退出。

    mysql> update mysql.user set password=password('today123') where user='root';
    mysql> flush privileges;      #其实这一步执行完之后,权限表已经加载到内从中,quit之后,再登录就已经需要密码了。
                        #为了严禁,还是要关闭mysql,再启动
    mysql> quit;

       5.退出mysql,重启mysql,再用新密码登录

    # mysqladmin -uroot -ptoday123 shutdown       #这种关闭的方法比较安全,
    #ps -ef|grep mysqld                #检查mysql进程,实在杀不掉的话,用killall mysqld
    #service mysqld start               #将mysql启动
    #mysql -uroot -ptoday123             #用新密码登录

     

  • 相关阅读:
    Web应用程序并发问题处理的一点小经验
    *.pvr.ccz文件还原成png格式
    在python 中is和= = 的区别
    pyhton,数据类型
    python,序列化
    python, 操作文件和目录
    python文件,字符串,二进制的读写
    io编程,python
    python,错误、调试和测试
    python,多线程
  • 原文地址:https://www.cnblogs.com/sdadx/p/7890277.html
Copyright © 2011-2022 走看看