0

0

MySQL 存取权限系统_MySQL

php中文网

php中文网

发布时间:2016-06-01 14:12:29

|

1333人浏览过

|

来源于php中文网

原创


  1. MySQL 用户名和口令
  * MySQL使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数MySQL客户尝试使用当前Unix用户名作为MySQL用户名登录,但是这仅仅为了方便,客户程序允许用-u或--user选项指定一个不同的名字。及与安全的考虑,所有的MySQL用户名都应该有口令。
  * MySQL用户名最长可以是16各字符;典型地,Unix用户名限制为8个字符。
  * MySQL口令与Unix口令没关系。
  * MySQL加密口令使用了一个Unix登录期间所用的不同算法,PASSWORD()和ENCRYPT()
  函数PASSWORD(str)
  从纯文本口令str计算一个口令字符串。该函数被用于为了在user授权表的Password列中存储口令而加密MySQL口令。
  mysql> select PASSWORD('badpwd');
  -> '7f84554057dd964b'
  PASSWORD()加密是非可逆的。PASSWORD()不以与Unix口令加密的相同的方法执行口令加密。你不应该假定如果你的Unix 口令和你的MySQL口令是一样的,PASSWORD()将导致与在Unix口令文件存储的相同的加密值。见ENCRYPT()。
  ENCRYPT(str[,salt])
  使用Unix crypt()系统调用加密str。salt参数应该是一个有2个字符的字符串。(MySQL 3.22.16中,salt可以长于2个字符。)
  mysql> select ENCRYPT("hello");
  -> 'VxuFAJXVARROc'
  如果crypt()在你的系统上不可用,ENCRYPT()总是返回NULL。ENCRYPT()只保留str起始8个字符而忽略所有其他,至少在某些系统上是这样。这将由底层的crypt()系统调用的行为决定。
  1. 与MySQL服务器连接
  语法格式:
  shell> mysql [-h host_name][-u user_name][-pyour_pass ]
  -h, -u和-p选项的另一种形式是--host=host_name、--user=user_name和--password=your_pass。
  注意:在-p或--password=与跟随它后面的口令之间没有空格。(在命令行上指定一个口令是不安全的!)
  对于命令行没有的联接参数,mysql使用缺省值:
  * 缺省主机名是localhost。
  * 缺省用户名是你的Unix登录名。
  * 如果没有-p,则没有提供口令。
  缺省值参数的指定:
  在你的主目录下“.my.cnf”的配置文件的[client]小节里指定连接参数:
  [client]
  host=host_name
  user=user_name
  password=your_pass
  注:命令行上被指定的值优先于在配置文件和环境变量中指定的值
  最安全的方法是让客户程序提示口令或在一个适当保护的“.my.cnf”文件中指定口令。
  1. MySQL提供的权限
  权限   列   上下文
  select Select_priv 表
  insert Insert_priv 表
  update Update_priv 表
  delete Delete_priv 表
  index Index_priv 表
  alter Alter_priv 表
  create Create_priv 数据库、表或索引
  drop Drop_priv 数据库或表
  grant Grant_priv 数据库或表
  references References_priv 数据库或表
  reload Reload_priv 服务器管理
  shutdown Shutdown_priv 服务器管理
  process Process_priv 服务器管理
  file File_priv 在服务器上的文件存取
  注:grant权限允许你把你自己拥有的那些权限授给其他的用户。
  file权限给予你用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读和写服务器上的文件,任何被授予这个权限的用户都能读或写MySQL服务器能读或写的任何文件。
  2. 存取控制:连接证实
  身份检查使用user表3个(Host, User和Password)范围字段。服务器只有在一个user表条目匹配你的主机名和用户名并且你提供了正确的口令时才接受连接。
  注:一个Host值可以是主机名或一个IP数字,或'localhost'指出本地主机。 可以在Host字段里使用通配符字符“%”和“_”。 Host值'%'匹配任何主机名。当一个连接被尝试时,服务器浏览排序的条目并使用找到的第一个匹配。
  普遍的误解是认为,对一个给定的用户名,当服务器试图对连接寻找匹配时,明确命名那个用户的所有条目将首先被使用。这明显不是事实。
  3. 存取控制:请求证实
  一旦你建立了一个连接,服务器进入阶段2。对在此连接上进来的每个请求,服务器检查你是否有足够的权限来执行它,授权表用GRANT和REVOKE命令操作。
  GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...]
  ON {tbl_name | * | *.* | db_name.*}
  TO user_name [IDENTIFIED BY 'password']
  [, user_name [IDENTIFIED BY 'password'] ...]
  [WITH GRANT OPTION]
  REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...]
  ON {tbl_name | * | *.* | db_name.*}
  FROM user_name [, user_name ...]
  GRANT在MySQL 3.22.11或以后版本中实现。对于更早MySQL版本,GRANT语句不做任何事情。
  GRANT和REVOKE命令允许系统主管在4个权限级别上授权和撤回赋予MySQL用户的权利:
  全局级别
  全局权限作用于一个给定服务器上的所有数据库。这些权限存储在mysql.user表中。
  数据库级别
  数据库权限作用于一个给定数据库的所有表。这些权限存储在mysql.db和mysql.host表中。
  表级别
  表权限作用于一个给定表的所有列。这些权限存储在mysql.tables_priv表中。
  列级别
  列权限作用于在一个给定表的单个列。这些权限存储在mysql.columns_priv表中。
  user表权限是超级用户权限。只把user表的权限授予超级用户如服务器或数据库主管是明智的。对其他用户,你应该把在user表中的权限设成'N'并且仅在一个特定数据库的基础上授权, 使用db和host表。
  4. 权限更改何时生效
  当mysqld启动时,所有的授权表内容被读进存储器并且从那点生效。
  用GRANT、REVOKE或SET PASSWORD对授权表施行的修改会立即被服务器注意到。
  如果你手工地修改授权表(使用INSERT、UPDATE等等),你应该执行一个FLUSH PRIVILEGES语句或运行mysqladmin flush-privileges告诉服务器再装载授权表,否则你的改变将不生效,除非你重启服务器。
  5. 建立初始的MySQL权限
  在安装MySQL后,你通过运行scripts/mysql_install_db安装初始的存取权限。包含下列权限集合:
  * MySQL root用户作为可做任何事情的一个超级用户。连接必须由本地主机发出。注意:出世的root口令是空的,因此任何人能以root而没有一个口令进行连接并且被授予所有权限。
  * 一个匿名用户,他可对有一个'test'或以'test_'开始的名字的数据库做任何时期事情,连接必须由本地主机发出。这意味着任何本地用户能连接并且视为匿名用户。
  * 其他权限被拒绝。例如,一般用户不能使用mysqladmin shutdown或mysqladmin processlist。
  为MySQL root用户指定一个口令(注意,你使用PASSWORD()函数指定口令):
  shell> mysql -u root mysql
  mysql> UPDATE user SET Password=PASSWORD('new_password')
  WHERE user='root';
  mysql> FLUSH PRIVILEGES;
  在MySQL 3.22和以上版本中,你可以使用SET PASSWORD语句:
  shell> mysql -u root mysql
  mysql> SET PASSWORD FOR root=PASSWORD('new_password');
  设置口令的另一种方法是使用mysqladmin命令:
  shell> mysqladmin -u root password new_password
  看看scripts/mysql_install_db脚本,看它如何安装缺省的权限。你可用它作为一个研究如何增加其他用户的基础
  为了完全重建权限表,删除在包含mysql数据库的目录下所有“*.frm”,“*.MYI”和“*.MYD”文件。(这是在数据库目录下面命名为“mysql”的目录,当你运行mysqld --help时,它被列出。)然后运行mysql_install_db脚本,可能在首先编辑它拥有你想要的权限之后。
  1. 向MySQL增加新用户权限
  增加用户2个不同的方法:
  通过使用GRANT语句或通过直接操作MySQL授权表。
  比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。
  shell> mysql --user=root mysql
  mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
  IDENTIFIED BY 'something' WITH GRANT OPTION;
  mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"
  IDENTIFIED BY 'something' WITH GRANT OPTION;
  mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
  mysql> GRANT USAGE ON *.* TO dummy@localhost;
  monty
  可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令('something'做这个。注意,我们必须对monty@localhost和monty@"%"发出GRANT语句。如果我们增加localhost条目,对localhost的匿名用户条目在我们从本地主机连接接时由mysql_install_db创建的条目将优先考虑,因为它有更特定的Host字段值,所以以user表排列顺序看更早到来。
  admin
  可以从localhost没有一个口令进行连接并且被授予reload和process管理权限的用户。这允许用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,还有mysqladmin processlist。没有授予数据库有关的权限。他们能在以后通过发出另一个GRANT语句授权。
  dummy
  可以不用一个口令连接的一个用户,但是只能从本地主机。全局权限被设置为'N'--USAGE权限类型允许你无需权限就可设置一个用户。它假定你将在以后授予数据库相关的权限。
  也可以直接通过发出INSERT语句增加同样的用户存取信息,然后告诉服务器再次装入授权表:
  shell> mysql --user=root mysql
  mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('something'),
  'Y','Y','Y

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

463

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

135

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

64

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

26

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

14

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

524

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

53

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 6万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.3万人学习

Git 教程
Git 教程

共21课时 | 3.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号