美文网首页
数据库 之 用户和权限管理(DCL语句)

数据库 之 用户和权限管理(DCL语句)

作者: ghbsunny | 来源:发表于2017-10-02 15:34 被阅读0次

    1. 概述

    数据库可以单独创建用户,而不使用登陆主机系统的账号,同时,可以对所创建的用户进行权限管理,实现了系统安全

    权限管理中,属于DCL:Data Control Language 数据控制语言,关键字:GRANT:授权 和 REVOKE:取消权限

    2 用户管理

    用户账号

    .用户账号:'user'@'host'

    user:用户名

    host:允许用户通过哪些主机远程连接mysqld服务

    IP、网络地址、主机名、通配符(%和_)

    mysql可以限定从哪个主机发起连接

    主机名如果写出主机名,而不是ip,那么网络中就要有dns能将主机名解析为ip,否则连接会失败

    如授权是192.168.1.%的ip段,连接时host是www.magedu.com,如果被解析为192.168.1.100,那么就可以连接该数据库,事实上192.168.1.100这个ip的主机名不用是固定,只需要能被解析为192.168.1.100就可以

    2.1 创建用户

    CREATE USER'username'@'host' [IDENTIFIED BY 'password'];

    用户名是有用户名+主机名(或者ip)组合成一个用户名

    这样的效果是组合验证,有限制的作用,某个用户只能在指定的用户名或者是指定的ip才能访问数据库

    create usersunny@'172.18.50.%' identified by 'Pass123456';

    在其他机器上连接,命令如下

    mysql -usunny -pPass1234-h172.18.50.73;

    创建完账号后,要给账号赋予权限,才能访问对应的表

    在服务器上,授权用户sunny对数据库服务器里的sunny这个库具有所有的权限

    grant all on sunny.* tosunny@'172.18.50.%';

    授权sunny具有管理所有库的权限

    grant all on *.* tosunny@'172.18.50.%';

    多了identify这个关键字,在授权的时候同时创建账号

    grant select,update on sunny.* tojack@'192.168.32.%' identified by "Pass123456";

    .查看当前用户:

    SELECT user();

    .查看用户:这个命令需要在mysql库里查看,因为user这张表是建在mysql库里,use mysql;

    SELECT User,Host,PasswordFROM user;

    2.2 删除用户

    DROP USER  'username'@'host';

    示例:删除默认的空用户

    DROP USER ''@'localhost';

    例子

    drop user jack@"192.168.32.%";

    2.3 更改口令

    1)SET PASSWORD FOR'user'@'host' = PASSWORD(‘password');

    PASSWORD(‘password')改口令,=

    PASSWORD(‘password')这个函数主要是用来给密码进行加密;建议用这个方法执行更改密码的操作。

    例子,注意密码也要用引号引起来,马上生效,客户端只要推出重新登陆就要用新密码登陆

    set password for"sunny"@"192.168.32.%" = password("Pass123456");

    2) UPDATE user SETpassword=PASSWORD('magedu') WHERE User='root' ;

    注意:上面修改表的命令不会马上生效,客户端退出重新登陆也还是要用旧密码,需要在服务器端执行:FLUSH PRIVILEGES生效

    这个命令不一定都要执行,有些时候会马上生效,如果授权后,而且刷新权限后还不生效,就退出重新登录就会生效

    3)/usr/local/mysql/bin/mysqladmin-u root–poldpasswordpassword 'newpassword‘

    另外,linux下破解密码最暴力的是清掉mysql这个目录,但是也会把mysql目录下的表都删掉,不建议这么破解账号

    windows下忘记root密码的时候,破解密码

    1.关闭正在运行的MySQL服务。

    2.打开DOS窗口,转到mysql\bin目录。

    3.输入mysqld

    --skip-grant-tables回车。--skip-grant-tables的意思是启动MySQL服务的时候跳过权限表认证。

    4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。

    5.输入mysql回车,如果成功,将出现MySQL提示符>。

    6.连接权限数据库:use mysql;。

    6.改密码:update

    user set password=password("123") where user="root";(别忘了最后加分号)。

    7.刷新权限(必须步骤):flush privileges;。

    8.退出quit。

    9.注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

    源文档<http://www.jb51.net/article/39454.htm>

    3  权限管理

    3.1  授权

    .权限级别:管理权限、数据库、表、字段、存储例程

    .Help GRANT

    .GRANT priv_type,... ON [object_type]db_name.tb_nameTO 'user'@'host'[IDENTIFIED BY 'password'] [WITH GRANT OPTION];

    [IDENTIFIED BY 'password']的命令不仅授权,而且如果账号不存在,会直接新生成不存在的账号

    WITH GRANT OPTION该账号可以把自己的权限授权给别的账号,一般不这么操作

    priv_type: ALL[PRIVILEGES]

    db_name.tb_name:

    *.*:所有库的所表

    db_name.*:指定库的所有表

    db_name.tb_name:指定库的指定表

    db_name.routine_name:指定库的存储过程和函数

    .示例:

    GRANT SELECT,DELETE ontestdb.* TO 'testuser'@'%'IDENTIFIED BY 'testpass‘;

    授权后如果新密码不生效,用命令:flush privileges;进行生效

    以下命令授权sunny这个用户在任何机器上都可以登陆,而且对sunny这个数据的所有表具有select和update的权限

    grant select,update onsunny.* to sunny@'%' identified by "Pass123456";

    以下命令把数据库sunny的所有表格都授予root@192.168.25.%这个账号

    grant all on sunny.* to root@“192.168.25.%”;

    .查看指定用户获得的授权:

    Help SHOW GRANTS

    SHOW GRANTS FOR

    'user'@'host';查看指定用户的授权

    SHOW GRANTS FORCURRENT_USER[()];

    查看当前用户的所有授权

    show grants forcurrent_user();

    3.2 回收授权

    注意,需要先查看以下到底授权了哪些,这对授权进行回收,没有授权,回收不了,如原来授权了sunny.*,现在要回收sunny.f2只回收一张表的权限,就不允许的

    REVOKE priv_type, ... ONdb_name.tb_nameFROM 'user'@'host

    例子

    revoke update on sunny.* fromjack@"%";

    REVOKE DELETE ON testdb.*FROM 'testuser'@'%‘

    .注意:MariaDB服务进程启动时会读取mysql库中所有授权表至内存

    (1) GRANT或REVOKE等执行权限操作会保存于系统表中,MariaDB的服务进程通常会自动重读授权表,使之生效

    (2)对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:mysql> FLUSH PRIVILEGES;

    相关文章

      网友评论

          本文标题:数据库 之 用户和权限管理(DCL语句)

          本文链接:https://www.haomeiwen.com/subject/qqktyxtx.html