当前位置: 首页 > 图文教程 > 数据库 > MYSQL > MYSQL教程:MySQL用户帐号管理

MYSQL
Mysql教程:如何修改默认密码
SQL Server教程:三种导入导出数据使用方式比较
Mysql技巧:指定只监听某个特定地址的设置方法
Mysql教程:1067错误解决方法
解决Mysql 错误:cannot create windows service for
解决Mysql连接过多错误的方法
Mysql教程:数据库字符替换和replace函数的使用
Mysql教程:性能跟踪语句
Mysql教程:对MySQL中的锁机制的总结
Mysql教程:介绍TIMESTAMP时间戳的使用
Mysql教程:将txt文本中的数据轻松导入MySQL表中的方法
MySQL:小编浅谈MySQL中的Geometry类
大型门户网站架构设计的可伸缩性
MYSQL教程:缓慢的drop table 操作
优化SQL语句需要注意的4点
MySQL前途难料开源数据库下一个领袖是谁?
网站Access数据库文件更安全的3种措施
sql xml入门:xpath和xquery
QA里执行sp_attach_db出现错误1813
MySQL中文模糊检索问题解决方法

MYSQL教程:MySQL用户帐号管理


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 47 ::
收藏到网摘: n/a

MySQL用户帐号管理主要用grant(授权)和revoke(撤权)两个SQL指令来管理。这两个指令实质是通过操作user(连接权限和全局权限)、db(数据库级权限)、tables_priv(数据表级权限)、columns_priv(数据列级权限)四个权限表来分配权限的。host权限表不受这两个指令影响。下面将会详细介绍用户权限管理的内容。

本文由软晨学习网(http://www.ruanchen.com)整理发布!转载请注明出处,谢谢!

  • GRANT语法说明:

    GRANT privileges (columns) #privileges表示授予的权限,columns表示作用的列(可选) ON what #设置权限级别,全局级、数据库级、数据表级和数据列级 TO account #权限授予的用户,用"user_name"@"host_name"这种用户名、主机名格式 IDENTIFIED BY 'password' #设置用户帐号密码 REQUIRE encryption requirements #设置经由SSL连接帐号 WITH grant or resource management options; #设置帐号的管理和资源(连接服务器次数或查询次数等)选项
    

    示例:

    mysql>grant all on db.* to 'test'@'localhost' identified by 'test';
    上例运行后的效果是,test用户只能通过‘test’密码从本机访问db数据库
    mysql>grant all on db.* to 'test'@'%' identified by 'test';
    上例运行后的效果是,test用户可通过‘test’密码从任意计算机上访问db数据库。‘%’代表任意字符,‘_’代表一个任意字符。主机名部份还可以是IP地址。
    
       
    如果没有给定主机部份,则默认为任意主机,也就是'test'和'test'@'%'是等价的。
  • Table 4.1. 访问权限表

    权限 权限说明
    CREATE TEMPORARY TABLES 创建临时数据表
    EXECUTE 执行存储过程(暂不支持)
    FILE 操作系统文件
    GRANT OPTION 可把本帐号的权限授予其它用户
    LOCK TABLES 锁定指定数据表
    PROCESS 查看运行着的线程信息
    RELOAD 重新加载权限表或刷新日志及缓冲区
    REPLICATION CLIENT 可查询主/从服务器主机名
    REPLICATION SLAVE 运行一个镜像从服务器
    SHOW DATABASES 可运行SHOW DATABASES指令
    SHUTDOWN 关闭数据库服务器
    SUPER 可用kill终止线程以及进行超级用户操作
       
    ALTER 可修改表和索引的结构
    CREATE 创建数据库和数据表
    DELETE 删除数据表中的数据行
    DROP 删除数据表和数据行
    INDEX 建立或删除索引
    INSERT 插入数据行
    REFERENCES (暂时不支持)
    SELECT 查询数据行
    UPDATE 更新数据行
       
    ALL 所有权限,但不包括GRANT。
    USAGE 无权限权限
  • Table 4.2. 权限作用范围(由ON子句设置)

    权限限定符 作用范围
    ON *.* 全局级权限,作用于所有数据库
    ON * 全局级权限,若未指定默认数据库,其作用范围是所有数据库,否则,其作用范围是当前数据库
    ON db_name.* 数据库级权限,作用于指定数据库里的所有数据表
    ON db_name.tbl_name 数据表级权限,作用于数据表里的所有数据列
    ON tbl_name 数据表级权限,作用于默认数据库中指定的数据表里的所有数据列
  • USAGE权限的用法:修改与权限无关的帐户项,如:

    mysql>GRANT USAGE ON *.* TO account IDENTIFIED BY 'new_password'; #修改密码
    mysql>GRANT USAGE ON *.* TO account REQUIRE SSL; #启用SSL连接
    mysql>GRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 10; #设置资源
    
  • 拥有WITH GRANT OPTION权限的用户可把自已所拥用的权限转授给其他用户,如:

    mysql>GRANT ALL ON db.* TO 'test'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
    这样test用户就有权把该权限授予其他用户。
    
  • 限制资源使用,如:

    mysql>GRANT ALL ON db.* TO account IDENTIFIED BY 'password' WITH MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 200 MAX_UPDATES_PER_HOUR 50;
    允许account用户每小时最多连接20次服务器,每小时最多发出200条查询命令(其中更新命令最多为50条)
    

    默认都是零值,即没有限制。FLUSH USER_RESOURCES和FLUSH PRIVILEGES可对资源限制计数器清零。

  • REVOKE语法说明:

    mysql>REVOKE privileges (columns) ON what FROM account;
    

    示例:

    mysql>REVOKE SELECT ON db.* FROM 'test'@'localhost';
    删除test帐号从本机查询db数据库的权限
    

    REVOKE可删除权限,但不能删除帐号,即使帐号已没有任何权限。所以user数据表里还会有该帐号的记录,要彻底删除帐号,需用DELETE命令删除user数据表的记录,如:

    % mysql -u root -p
    mysql>use mysql
    mysql>DELETE FROM user where User='test' and Host='localhost';
    mysql fulsh privileges;
    

    REVOKE不能删除REQUIRE和资源占用的配置。他们是要用GRANT来删除的,如:

    GRANT USAGE ON *.* TO account REQUIRE NONE; #删除account帐号的SSL连接选项
    GRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 0 MAX_QUERIES_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0; #删除account帐号的资源限制