zoukankan      html  css  js  c++  java
  • MYSQL数据库学习十六 安全性机制

    16.1 MYSQL数据库所提供的权限

     16.1.1 系统表 mysql.user

     1. 用户字段

    • Host:主机名;
    • User:用户名;
    • Password:密码。

     2. 权限字段

    以“_priv”字符串结尾的字段

    通常,可以使用GRANT语句为用户赋予一些权限,也可以通过Update语句更新user表的方式来设置权限;

    不过,修改user表之后,一定要执行一下FLUSH PRIVILEGES,否则可能会出现如下错误:

    Error (1133): Can’t find any matching row in the user table

    user表中的列 权限名称 权限范围
     Create_priv  CREATE  数据库、表或索引
     Drop_priv  DROP  数据库或表
     Grant_priv  GRANT OPTION  数据库、表、存储过程、函数
     References_priv  REFERENCES  数据库和表
     Alter_priv  ALTER  修改表
     Delete_priv  DELETE  删除表
     Index_priv  INDEX  用索引查询表
     Insert_priv  INSERT  插入表
     Select_priv  SELECT  查询表
     Update_priv  UPDATE  更新表
     Create_view_priv  CEATE VIEW  创建视图
     Show_view_priv  SHOW VIEW  查看视图
     Create_routine_priv  CREATE ROUTINE  创建存储过程或函数
     Alter_routine_priv  ALTER ROUTINE  修改存储过程或函数
     Execute_priv  EXECUTE  执行存储过程或函数
     File_priv  FILE  加载服务器主机上的文件
     Create_tmp_table_priv  CREATE TEMPORARY TABLES  创建临时表
     Lock_tables_priv  LOCK TABLES  锁定表
     Create_user_priv    CREATE USER  创建用户
     Process_priv  PROCESS  服务器管理
     Reload_priv   RELOAD  重新加载权限表
     Repl_client_priv  REPLICATION CLIENT  服务器管理
     Repl_slave_priv  REPLICATION SLAVE  服务器管理
     Show_db_priv  SHOW DATABASES  查看数据库
     Shutdown_priv  SHUTDOWN  关闭服务器
     Super_priv  SUPER  超级权限
    Event_priv    创建、修改和删除事件
    Trigger_priv    创建和删除触发器

     3. 安全字段

    字段名 含义
    ssl_type 支持ssl标准加密的安全字段
    ssl_cipher 支持ssl标准加密的安全字段
    x509_issuer 支持x509标准的字段
    x509_subject 支持x509标准的字段

    在MySQL中,包含ssl字符串的字段主要用来实现加密,包含x509字符串的字段主要用来标识用户。

    MySQL的字段通常不支持ssl标准,可以通过以下语句查看字段是否支持ssl标准:

    SHOW VARIABLES LIKE 'have_openssl'
    

     4.资源控制字段

    • max_questions:每小时可以允许执行多少次查询;
    • max_updates:每小时可以允许执行多少次更新;
    • max_connections:每小时可以建立多少连接;
    • max_user_connections:单个用户可以同时具有的连接数。

    默认值为0,表示无限制。

     16.1.2 系统表 mysql.db 和 mysql.host

     1.用户字段

    mysql.db

    • Host:主机名;
    • User:用户名;
    • Db:数据库名。

    mysql.host 是mysql.db的扩展

    • Host:主机名;
    • Db:数据库名。

    当查找某个用户的权限,首先会从系统表 mysql.db 中查找,如果找不到Host的值,则到 mysql.host 去查找。

     2.权限字段

    mysql.db比mysql.host多了两个字段:

    • Create_routine_priv:创建存储过程或函数权限。
    • Alter_routine_priv:修改存储过程或函数权限。

     16.1.3 其他权限表

    1. mysql.tables_priv:实现单个表的权限设置。
    2. columns_priv:实现单个字段列的权限设置。

    16.2 MYSQL数据库所提供的用户机制

     16.2.1 登录和退出MySQL

    mysql -h hostname|hostIP -p port -u username -p DatabaseName -e "SQ语句"
    

     -p port:未指定默认为3306;

     DatabaseName:未指定默认为mysql.

    EXIT|QUIT
    

     16.2.2 创建普通用户账户

     1.CREATE USER

    CREATE USER username[IDENTIFIED BY [PASSWORD] 'password']
        [,IDENTIFIED BY [PASSWORD] 'password']
        ......
    

     2.INSERT INTO

    INSERT INTO mysql.user(Host,User,Password[,ssl_cipher,x509_issuer,x509_subject])
        VALUES('%','username',PASSWORD('password')[,'','','']);
    

     3.GRANT

    GRANT priv_type ON databasename.tablename
        TO username[IDENTIFIED BY [PASSWORD] 'password']
        [,username [IDENTIFIED BY [PASSWORD] 'password']]
        ......
    

     16.2.3 利用root修改root用户账号密码

     1.mysqladmin

    mysqladmin -u username -p password "newpassword";
    

     2.SET PASSWORD

    SET PASSWORD=PASSWORD("newpassword");
    

     3.UPDATE

    UPDATE mysql.user SET password=PASSWORD("newpassword")
        WHERE user="root" AND host="localhost";
    

     16.2.4 利用root修改普通用户账号密码

     1.GRANT

    GRANT priv_type ON database.table
        TO user[IDENTIFIED BY [PASSWORD] "newpassword"];
    

     2.SET PASSWORD FOR

    SET PASSWORD FOR 
        'username'@'hostname'=PASSWORD("newpassword");
    

     *当通过普通用户账户登录到MySQL服务器后,可以通过SET命令修改自己的密码。

    SET PASSWORD=PASSWORD("newpassword");
    

      3.UPDATE

    UPDATE mysql.user SET password=PASSWORD("newpassword")
        WHERE user="username" AND host="localhost";
    

     16.2.5 删除普通用户账号

     1.DROP USER

    DROP USER user1[,user2] ...
    

     2.DELETE FROM

    DELETE FROM mysql.user
        WHERE user="username" AND host="localhost";
    

    16.3 权限管理

     16.3.1 对用户进行授权

    GRANT priv_type [(column_list)] ON database.table
        TO user [IDENTIFIED BY [PASSWORD] 'password']
        [,user [IDENTIFIED BY [PASSWORD] 'password']]
        ...
        WITH with_option[with_option]
    

     with_option参数取值:

    • GRANT OPTION:被授权的用户可以将这些权限赋予给别的用户;
    • MAX_QUERIES_PER_HOUR count:设置每小时可以允许执行count次查询;
    • MAX_UPDATES_PER_HOUR count:设置每小时可以允许执行count次更新;
    • MAX_CONNECTIONS_PER_HOUR count:设置每小时可以建立count个连接;
    • MAX_USER_CONNECTIONS count:设置单个用户可以同时具有的count个连接数;

     16.3.2 查看用户所拥有权限

    SHOW GRANTS FOR 'username'@'localhost' G
    

     16.3.3 收回用户所拥有权限

    REVOKE priv_type[(column_list)] ON database.table
        FROM user1 [IDENTIFIED BY[PASSWORD] 'password']
        [,user2 [IDENTIFIED BY[PASSWORD] 'password']]
        ...
    

     收回全部权限:

    REVOKE ALL PRIVILEGES,GRANT OPTION
        FROM user1 [IDENTIFIED BY[PASSWORD] 'password']
        [,user2 [IDENTIFIED BY[PASSWORD] 'password']]
        ...
    

    参考博客:http://www.cnblogs.com/kissdodog/p/4173337.html

  • 相关阅读:
    安装SQL Server驱动到Maven仓库[转]
    Nuget 摘录
    删除除了Src属性以后的全部属性
    执行NET 命令无法使用超过20个字符的组名或用户名
    在EntityFramework中使用 nock的方法。
    两代码的区别
    SQLServer 执行计划
    win7电脑的账户被禁用了怎么办
    win10防火墙损坏如何修复
    win10摄像头在哪打开?
  • 原文地址:https://www.cnblogs.com/zengzhihua/p/4623798.html
Copyright © 2011-2022 走看看