mysql学习--------用户管理(登录,创建用户,删除用户,修改密码,授权,权限回收,查看权限)

MySQL 服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库中。

存储账户权限信息表主要有:user、db、tables_priv、columns_priv、procs_priv。

mysql学习--------用户管理(登录,创建用户,删除用户,修改密码,授权,权限回收,查看权限)

常用的如下:

user表

    user表示 Mysql 中最重要的一个权限表,记录允许连接到服务器的账号信息,里面的权限是全局级的。

db表

    db表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。

tables_priv表:

    tables_prive表用来对表设置操作权限。

columns_prive表:

    columns_prive表用来对表的某一列设置权限。


账户管理:

    登录和退出 Mysql 服务器:

        在命令行中执行:

            mysql -h主机地址 -u用户名 -p

mysql学习--------用户管理(登录,创建用户,删除用户,修改密码,授权,权限回收,查看权限)

        注:登录服务器,同时执行一条查询语句

            mysql -uroot -p -hlocalhost test_db -e '查询语句'

    新建普通用户:

        使用 CREATE  USER 语句创建新用户:

            执行 create user 语句时, 服务器会修改相应的用户授权表,添加或者修改用户及其权限

            create user 语句的基本语法如下:

                CREATE USER '用户名'@'host' IDENTIFIED BY '密码'   # 创建带密码的用户

                CREATE USER '用户名'@'host'   # 创建不带密码的用户

            CREATE USER 语句 会添加一个新的 mysql 账户 。 使用 CREATE USER 语句用户,必须拥有全局的 CREATE USER 权限或 MySQL 数据库的 INSERT 权限, 每添加一个用户, CREATE USER 语句会在 mysql.user 表中添加一条新记录,但是新创建的账户没有任何权限

            使用哈希值设置密码:

            CREATE USER '用户名'@'host' IDENTIFIED BY  PASSWORD '密码的散列值'  创建的用户无权限

            步骤:

                1、获取密码的哈希散列值 password() 函数

                    select password('密码')

                2、CREATE USER 'username' @'host' INSENTIFIED BY PASSWORD '哈希值'


        使用 GRANT 语句 创建新用户

            使用 GRANT 语句创建新用户时必须有 GRANT 权限。GRANT 语句是添加新用户并授权他们访问 MySQL 对象的首选方法。GRANT 语句会自动将密码加密后存入表。

            GRANT 语句的基本格式:

                GRANT 权限 ON dbname.tbname TO  'username' @ 'host'  INDENTIFIED BY 'password'  WITH GRANT OPTION

                    WITH GRANT OPTION 为可选项,表示对新用户赋予 GRANT 权限。


        直接操作 MySQL 用户表(不推荐):

            使用 INSERT 语句向mysql.user表中插入一条新的数据

            添加成功后, 还需要执行  FLUSH PRIVILEGES  告诉服务器重新加载授权表。


    删除普通用户:

        使用 DROP USER 语句删除用户

            DROP USER 语法格式:

                DROP USER 'username' @ 'host';  删除单个用户

                DROP USER;   删除来自所有授权表的账户权限记录

            使用 DROP USER ,必须拥有 MySQL 数据库的全局 CREATE USER 权限 或 DELETE 权限。

        

        使用 DELETE 语句删除用户

            基本语法:

                DELETE FROM MySQL.user WHERE host='hostname' and user='username';

        

    root 用户修改自己的密码

        使用mysqladmin 命令在命令行指定新的密码

            基本语法:

                mysqladmin -u username -h localhost -p password "newpwd"

                mysql学习--------用户管理(登录,创建用户,删除用户,修改密码,授权,权限回收,查看权限)

                注:1、我使用这个命令修改密码的时候有警告,暂时不知道怎么解决。(不影响命令执行)

                       2、如果密码用单引号括起来会报错,命令执行失败,密码修改失败。

                        mysql学习--------用户管理(登录,创建用户,删除用户,修改密码,授权,权限回收,查看权限)

        使用 SET 语句修改 root/普通 用户的密码:

            语法格式:

                SET PASSWORD=password("newpwd");

            新密码必须使用 password()函数加密

            mysql学习--------用户管理(登录,创建用户,删除用户,修改密码,授权,权限回收,查看权限)


    root 用户修改普通用户密码

        使用 SET 语句修改普通用户的密码

            基本语法:

                SET PASSWORD FOR 'username' @ 'hostname' = password('newpwd');

            mysql学习--------用户管理(登录,创建用户,删除用户,修改密码,授权,权限回收,查看权限)


        使用 GRANT 语句修改普通用户的密码

            基本语法:

                GRANT USAGE ON *.* TO 'username'@'hostname' INDENTIFIED BY "newpwd";

                mysql学习--------用户管理(登录,创建用户,删除用户,修改密码,授权,权限回收,查看权限)


权限管理:

    授权

        全局层级

            GRANT ALL ON *.*(*.*表示所有)REVOKE ALL ON *.*(*.*表示所有)授予撤销全局权限

        数据库层级

            GRANT ALL ON db_name 和 REVOKE ALL ON db_name 指授予撤销数据库权限

        表层级

            GRANT ALL ON db_name.tb_name 和 REVOKE ALL ON db_name.tb_name 指授予撤销表权限

        列层级

            mysql学习--------用户管理(登录,创建用户,删除用户,修改密码,授权,权限回收,查看权限)


    收回权限

        在将用户账户从 user 表删除之前,应该收回相应用户的所有权限。

        收回用户的所有权限。

            基本格式:

                REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host' [,'user'@'host'];

        收回指定的权限

            基本格式:

                REVOKE 权限类型 ON table1, table2,tabel3..... FROM 'user'@'host' [,'user'@'host'];


    查看权限

        基本格式:

            SHOW GRANTS FOR 'user'@'host' ;