资讯详情

MySQL授权认证

? MySQL-介绍权限制度 ? 权限系统的功能是授予来自主机的用户查询、插入、修改和删除数据库操作的权限 ? 不能明确指定拒绝用户连接 ? 执行语句包括权限控制(授权和回收)create user, grant, revoke ? 授权后的权限将存储在MySQL内部数据库(数据库名称mysql) ,数据库启动后,将权限信息复制到内存中 ? MySQL用户的认证信息不光包括用户名,还要包含连接发起的主机(以下两个joe被认为不是同一个用户) ? SHOW GRANTS FOR ‘joe’@‘office.example.com’; ? SHOW GRANTS FOR 'joe'@'home.example.com'; ? MySQL权限级别介绍 ? MySQL权限级别 ? 整体管理权限作用于整体MySQL实例级别 ? 数据库级别的权限作用于指定数据库或所有数据库 ? 数据库对象级别的权限作用于指定的数据库对象(表、视图等)或所有数据库对象 ? 权限存储在mysql库的user, db, tables_priv, columns_priv, and procs_priv在这些系统表中,等待MySQL实例启动后,加载到内存中 ? 查看mysql实例默认root用户权限(来自)localhost) ? mysql> show grants for root@localhost; ? --------------------------------------------------------------------- ? | Grants for root@localhost | ? --------------------------------------------------------------------- ? | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | ? 对比root用户在几个权限系统表中的数据 ? mysql> select * from user where user=‘root’ and host=‘localhost’; ##都是’Y’ ? mysql> select * from db where user=‘root’ and host=‘localhost’; ##无记录 ? mysql> select * from tables_priv where host=‘localhost’ and user=‘root’; ##无记录 ? mysql> select * from columns_priv where user=‘root’ and host=‘localhost’; ##无记录 ? mysql> select * from procs_priv where user=‘root’ and host=‘localhost’; ##无记录MySQL权限级别介绍 ? 查看mysql实例默认mysql.sys用户权限(来自)localhost) ? mysql> show grants for ‘mysql.sys’@localhost; ? --------------------------------------------------------------- ? | Grants for mysql.sys@localhost | ? --------------------------------------------------------------- ? | GRANT USAGE ON *.* TO 'mysql.sys'@'localhost' | ? | GRANT TRIGGER ON `sys`.* TO 'mysql.sys'@'localhost' | ? | GRANT SELECT ON `sys`.`sys_config` TO 'mysql.sys'@'localhost' | ? --------------------------------------------------------------- ? 对比mysql.sys用户在几个权限系统表中的数据 ? mysql> select * from user where user=‘mysql.sys’ and host=‘localhost’; ##都是’N’ ? mysql> select * from db where user=‘mysql.sys’ and host=‘localhost’; ##一条记录,在sys数据库上的Trigger_priv字段为’Y’, ? mysql> select * from tables_priv where host=‘localhost’ and user=‘mysql.sys’; ##一条记录,在sys数据库的sys_config表上有select权限 ? mysql> select * from columns_priv where user=‘mysql.sys’ and host=‘localhost’; ##无记录 ? mysql> select * from procs_priv where user=‘mysql.sys’ and host=‘localhost’; ##无记录MySQL权限详解(1) ? All/All Privileges权限代表全局或全数据库对象级别的所有权 ? Alter权限代表允许修改表结构的权限,但必须要求有create和insert权限合作。如果是rename要求有表名alter和drop原表, create和insert新表的权限 ? Alter routine权限代表允许修改或删除存储过程和函数的权限 ? Create权限代表允许创建新的数据库和表 ? Create routine权限代表允许创建存储过程和函数的权限 ? Create tablespace允许创建、修改、删除表空间和日志组的权限代表 ? Create temporary tables权限代表允许创建临时表的权限 ? Create user权限代表允许创建、修改、删除、重命名user的权限 ? Create view权限代表允许创建视图的权限MySQL权限详解(2) ? Delete权限代表允许删除行数据的权限 ? Drop允许删除数据库、表和视图的权限,包括truncate table命令 ? Event允许查询、创建、修改、删除权限代表MySQL事件 ? Execute权限代表允许执行存储过程和函数的权限 ? File许可权代表MySQL读写磁盘文件操作可访问的目录,可使用的命令包括load data infile,select … into outfile,load file()函数 ? Grant option权限代表是否允许这个用户授权或收回其他用户的权限 ? Index权限代表是否允许创建和删除索引 ? Insert权限代表是否允许限代表是否允许在表中插入数据analyze table,optimize table,repair table句子也需要insert权限 ? Lock权限代表允许拥有select定权限表,防止其他链接读写表MySQL权限详解(3) ? Process允许权限代表查看MySQL执行过程信息,如执行show processlist,mysqladmin processlist, show engine等命令 ? Reference权限是在5.7.6版本介绍后,表示是否允许创建外键 ? Reload允许执行权限代表flush命令,指明重新加载权限表到系统内存中,refresh命令代表关闭并重新打开日志文件,刷新所有表格 ? Replication client允许执行权限代表show master status,show slave status,show binary logs命令 ? Replication slave允许权限代表slave主机通过此用户连接master建立主从复制关系 ? Select权限代表允许从表中查看数据,有些不查询表中的数据select如果执行,则不需要此权限。Select 1 1, Select PI() 2;而且select权限在执行update/delete语句中含有where也需要条件 ? Show databases权限代表通过执行show databases命令查看所有数据库名称 ? Show view权限代表通过执行show create view命令检查视图创建的句子MySQL权限详解(4) ? Shutdown权限代表允许关闭数据库实例,执行语句包括mysqladmin shutdown ? Super权限代表允许执行一系列数据库管理命令,包括kill强制关闭连接命令, change master to创建复制关系命令和create/alter/drop server等命令 ? Trigger允许创建、删除、执行和显示触发器的权限代表 ? Update权限代表允许修改表中数据的权限 ? Usage权限是创建用户后的默认权限,代表连接登录权限 ? mysql> create user abc@localhost; ? mysql> show grants for abc@localhost; ? ----------------------------------------- ? | Grants for abc@localhost | ? ----------------------------------------- ? | GRANT USAGE ON *.* TO 'abc'@'localhost' | ? ----------------------------------------- 系统权限表 ? 权限存储在mysql库的user,db, tables_priv, columns_priv, and procs_priv在这些系统表中,等待MySQL实例启动后,加载到内存中 ? User表:存储用户账户信息和全球级别(所有数据库)权限决定了哪些用户可以访问哪些主机的数据库实例。如果有全局权限,则意味着所有数据库都有此权限 ? Db表:存储数据库级别的权限决定了哪些主机和用户可以访问该数据库 ? Tables_priv表:存储表级别的权限决定了哪些主机户可以访问数据库的这个表 • Columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段 • Procs_priv表:存放存储过程和函数级别的权限系统权限表 • User和db权限表结构系统权限表

• User权限表结构中的特殊字段 • Plugin,password,authentication_string三个字段存放用户认证信息 • Password_expired设置成’Y’则表明允许DBA将此用户的密码设置成过期而且过期后要求用户的使用者重置密码(alter user/set password重置密码) • Password_last_changed作为一个时间戳字段代表密码上次修改时间,执行create user/alter user/set password/grant等命令创建用户或修改用户密码时此数值自动更新 • Password_lifetime代表从password_last_changed时间开始此密码过期的天数 • Account_locked代表此用户被锁住,无法使用系统权限表

• Tables_priv和columns_priv权限表结构 • Timestamp和grantor两个字段暂时没用系统权限表 • Tables_priv和columns_priv权限值系统权限表

• procs_priv权限表结构 • Routine_type是枚举类型,代表是存储过程还是函数 • Timestamp和grantor两个字段暂时没用系统权限表 • 系统权限表字段长度限制表 • 权限认证中的大小写敏感问题 • 字段user,password,authencation_string,db,table_name大小写敏感 • 字段host,column_name,routine_name大小写不敏感系统权限表 • User用户大小写敏感 • mysql> create user abc@localhost; • ERROR 1396 (HY000): Operation CREATE USER failed for 'abc'@'localhost' • mysql> create user Abc@localhost; • Query OK, 0 rows affected (0.01 sec) • Host主机名大小写不敏感 • mysql> create user abc@Localhost; • ERROR 1396 (HY000): Operation CREATE USER failed for 'abc'@'localhost'查看用户权限信息 • 查看已经授权给用户的权限信息 • SHOW GRANTS FOR ‘root'@‘localhost'; • +---------------------------------------------------------------------+ • | Grants for root@localhost | • +---------------------------------------------------------------------+ • | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | • | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | • +---------------------------------------------------------------------+   • 查看用户的其他非授权信息 • mysql> show create user root@localhost; • +------------------------------------------------------------------------------------------------------------------------------------+ • | CREATE USER for root@localhost| • +------------------------------------------------------------------------------------------------------------------------------------+ • | CREATE USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS'*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK | • +------------------------------------------------------------------------------------------------------------------------------------+MySQL授权用户 • MySQL的授权用户由两部分组成: 用户名和登录主机名 • 表达用户的语法为‘user_name’@‘host_name’ • 单引号不是必须,但如果其中包含特殊字符则是必须的 • ‘’@‘localhost’代表匿名登录的用户 • Host_name可以使主机名或者ipv4/ipv6的地址。 Localhost代表本机, 127.0.0.1代表ipv4的本机地址, ::1代表ipv6的本机地址 • Host_name字段允许使用%和_两个匹配字符,比如’%’代表所有主机, ’%.mysql.com’代表来自mysql.com这个域名下的所有主机, ‘192.168.1.%’代表所有来自192.168.1网段的主机 MySQL修改权限的生效 • 执行Grant,revoke,set password,rename user命令修改权限之后, MySQL会自动将修改后的权限信息同步加载到系统内存中。 • 如果执行insert/update/delete操作上述的系统权限表之后,则必须再执行刷新权限命令才能同步到系统内存中,刷新权限命令包括: flush privileges/mysqladmin flush-privileges/mysqladmin reload • 如果是修改tables和columns级别的权限,则客户端的下次操作新权限就会生效 • 如果是修改database级别的权限,则新权限在客户端执行use database命令后生效 • 如果是修改global级别的权限,则需要重新创建连接新权限才能生效 • --skip-grant-tables可以跳过所有系统权限表而允许所有用户登录,只在特殊情况下暂时使用MySQL用户连接 • shell> mysql --user=finley --password db_name • shell> mysql -u finley -p db_name • shell> mysql --user=finley --password=password db_name • shell> mysql -u finley -ppassword db_name创建MySQL用户 • 有两种方式创建MySQL授权用户 • 执行create user/grant命令(推荐方式) • 通过insert语句直接操作MySQL系统权限表 • mysql> CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass'; • mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'localhost' WITH GRANT OPTION; • mysql> CREATE USER 'finley'@'%' IDENTIFIED BY 'some_pass'; • mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'%‘ WITH GRANT OPTION; • mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin_pass'; • mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; • mysql> grant select(id) on test.temp to cdq@localhost;创建MySQL用户 • mysql> SHOW GRANTS FOR 'admin'@'localhost'; • +-----------------------------------------------------+ • | Grants for admin@localhost | • +-----------------------------------------------------+ • | GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost' | • +-----------------------------------------------------+ • mysql> SHOW CREATE USER 'admin'@'localhost'\G • *************************** 1. row *************************** • CREATE USER for admin@localhost: CREATE USER 'admin'@'localhost' • IDENTIFIED WITH 'mysql_native_password' • AS '*67ACDEBDAB923990001F0FFB017EB8ED41861105' • REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK • mysql> CREATE USER 'custom'@'localhost' IDENTIFIED BY 'obscure'; • mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP • -> ON bankaccount.* • -> TO 'custom'@'localhost'; • mysql> CREATE USER 'custom'@'host47.example.com' IDENTIFIED BY 'obscure'; • mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP • -> ON expenses.* • -> TO 'custom'@'host47.example.com'; • mysql> CREATE USER 'custom'@'%.example.com' IDENTIFIED BY 'obscure'; • mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP • -> ON customer.* • -> TO 'custom'@'%.example.com';回收MySQL用户权限 • 通过revoke命令收回用户权限回收MySQL用户权限

• 通过revoke命令收回用户权限 • mysql> show grants for 'mysql.sys'@localhost; • +---------------------------------------------------------------+ • | Grants for mysql.sys@localhost | • +---------------------------------------------------------------+ • | GRANT USAGE ON *.* TO 'mysql.sys'@'localhost' | • | GRANT TRIGGER ON `sys`.* TO 'mysql.sys'@'localhost' | • | GRANT SELECT ON `sys`.`sys_config` TO 'mysql.sys'@'localhost' | • mysql> revoke select on `sys`.`sys_config` from 'mysql.sys'@localhost; • mysql> show grants for 'mysql.sys'@localhost; • +-----------------------------------------------------+ • | Grants for mysql.sys@localhost | • +-----------------------------------------------------+ • | GRANT USAGE ON *.* TO 'mysql.sys'@'localhost' | • | GRANT TRIGGER ON `sys`.* TO 'mysql.sys'@'localhost' |删除MySQL用户 • 通过执行drop user命令删除MySQL用户 • mysql> DROP USER 'jeffrey'@'localhost';设置MySQL用户资源限制 • 通过设置全局变量max_user_connections可以限制所有用户在同一时间连接MySQL实例的数量,但此参数无法对每个用户区别对待,所以MySQL提供了对每个用户的资源限制管理 • MAX_QUERIES_PER_HOUR:一个用户在一个小时内可以执行查询的次数(基本包含所有语句) • MAX_UPDATES_PER_HOUR:一个用户在一个小时内可以执行修改的次数(仅包含修改数据库或表的语句) • MAX_CONNECTIONS_PER_HOUR:一个用户在一个小时内可以连接MySQL的时间 • MAX_USER_CONNECTIONS:一个用户可以在同一时间连接MySQL实例的数量 • 从5.0.3版本开始,对用户‘user’@‘%.example.com’的资源限制是指所有通过example.com域名主机连接user用户的连接,而不是分别指从host1.example.com和host2.example.com主机过来的连接设置MySQL用户资源限制 • 通过执行create user/alter user设置/修改用户的资源限制 • mysql> CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank' -> WITH MAX_QUERIES_PER_HOUR 20 -> MAX_UPDATES_PER_HOUR 10 -> MAX_CONNECTIONS_PER_HOUR 5   -> MAX_USER_CONNECTIONS 2; • mysql> ALTER USER 'francis'@'localhost' WITH MAX_QUERIES_PER_HOUR 100; • 取消某项资源限制既是把原先的值修改成0 • mysql> ALTER USER 'francis'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0; • 当针对某个用户的max_user_connections非0时,则忽略全局系统参数max_user_connections,反之则全局系统参数生效设置MySQL用户的密码 • 执行create user创建用户和密码 • mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; • 修改用户密码的方式包括: • mysql> ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; • mysql> SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass'); • mysql> GRANT USAGE ON *.* TO 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; • shell> mysqladmin -u user_name -h host_name password "new_password" • 修改本身用户密码的方式包括: • mysql> ALTER USER USER() IDENTIFIED BY 'mypass'; • mysql> SET PASSWORD = PASSWORD('mypass');设置MySQL用户密码过期策略 • 设置系统参数default_password_lifetime作用于所有的用户账户 • default_password_lifetime=180 设置180天过期 • default_password_lifetime=0 设置密码不过期 • 如果为每个用户设置了密码过期策略,则会覆盖上述系统参数 • ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY; • ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE NEVER; 密码不过期 • ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE DEFAULT; 默认过期策略 • 手动强制某个用户密码过期 • ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE; mysql> SELECT 1; ERROR 1820 (HY000): You must SET PASSWORD before executing this statement mysql> ALTER USER USER() IDENTIFIED BY 'new_password'; Query OK, 0 rows affected (0.01 sec) mysql> SELECT 1; | 1 |MySQL用户lock • 通过执行create user/alter user命令中带account lock/unlock子句设置用户的lock状态 • Create user语句默认的用户是unlock状态 • mysql> create user abc2@localhost identified by 'mysql' account lock; • Query OK, 0 rows affected (0.01 sec) • Alter user语句默认不会修改用户的lock/unlock状态 • mysql> alter user 'mysql.sys'@localhost account lock; • Query OK, 0 rows affected (0.00 sec) • mysql> alter user 'mysql.sys'@localhost account unlock; • Query OK, 0 rows affected (0.00 sec) • 当客户端使用lock状态的用户登录MySQL时,会收到如此报错 Access denied for user 'user_name'@'host_name'. Account is locked.企业应用中的常规MySQL用户 • 企业生产系统中MySQL用户的创建通常由DBA统一协调创建,而且按需创建 • DBA通常直接使用root用户来管理数据库 • 通常会创建指定业务数据库上的增删改查、临时表、执行存储过程的权限给应用程序来连接数据库 • Create user app_full identified by ‘mysql’; • Grant select,update,insert,delete,create temporary tables,execute on esn.* to app_full@’10.0.0.%’; • mysql> show grants for app_full@'10.0.0.%'; • +------------------------------------------------------------------------------------------------------------+ • | Grants for app_full@10.0.0.% | • +------------------------------------------------------------------------------------------------------------+ • | GRANT USAGE ON *.* TO 'app_full'@'10.0.0.%' | • | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, EXECUTE ON `esn`.* TO 'app_full'@'10.0.0.%' | • 通常也会创建指定业务数据库上的只读权限给特定应用程序或某些高级别人员来查询数据,防止数据被修改 • Create user app_readonly identified by ‘mysql’; • Grant select on esn.* to app_readonly identified by ‘mysq’;企业应用中的MySQL用户密码设定 • 企业生产系统中MySQL用户的密码设定有严格的规范,通常要有密码复杂度、密码长度等要求 • 搜索网上的密码生成器,能按要求生成随机密码 • http://suijimimashengcheng.51240.com/

标签: 光幕式传感器esn

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台