MySQL与PHP的基础与应用专题之数据控制
作者:我是小白呀 发布时间:2023-11-23 01:03:21
概述
从今天开始, 小白我将带领大家一起来补充一下 数据库的知识.
数据控制语言
数据控制语言 (Data Control Language) 是用来设置或更改数据库用户或角色权限的语句.
层级 | 描述 |
---|---|
全局层级 | 适用于一个给定服务器中的所有数据库. 这些权限存储在 mysql.user 表中 |
数据库层级 | 适用于一个给定数据库中的所有目标. 这些权限存储在 mysql.db 和 mysql.host 表中 |
表层级 | 适用于一个给定表中所有的列. 这些权限存储在 mysql.tables_priv 表中 |
列层级 | 使用于一个给定表中的单一列. 这些权限存储在 mysql.columns_priv 表中 |
子程序层级 | CREATE ROUTINE, ALTER ROUTINE, EXECUTE 和 GRANT 权限适用于已存储的子程序. 这些权限可以被授予为全局层级和数据库层级 |
MySQL 权限体系
MySQL 的权限信息主要存储在以下几张表中, 当用户连接数据库时, MySQL 会根据这些表对用户进行权限验证.
表名 | 描述 |
---|---|
user | 用户权限表, 记录账号, 密码及全局性权限信息 |
db | 记录数据库相关权限 |
table_priv | 用户对某个表拥有的权限 |
column_priv | 用户对某表某个列所拥有的权限 |
procs_priv | 用户对存储过程及存储函数的操作权限 |
用户管理
在 MySQL 中, 使用 CREATE USER 来创建用户, 用户创建后没有任何权限.
查看所有用户:
创建用户
MySQL 的用户账号由两部分组成: 用户名和主机名, 即用户名@主机名,主机名可以是 IP 或机器名称, 主机名为%
表示允许任何地方的主机远程登录 MySQL 数据库.
格式:
CREATE USER '用户名' [@'主机名'][IDENTIFIED BY '密码'];
例子:
<?php
$conn = mysqli_connect("localhost", "root","admin","mysql");
if ($conn) {
echo "数据库连接成功\n";
} else {
echo mysqli_connect_error();
}
# SQL语句
$SQL = "CREATE USER 'user1'@'%'
IDENTIFIED BY '123456'";
# 执行
$result = mysqli_query($conn, $SQL);
# 查看是否执行成功
if ($result) {
echo "SQL 语句执行成功!\n";
}else {
echo mysqli_error($conn);
}
# 关闭连接
mysqli_close($conn);
?>
效果:
删除用户
格式:
DROP USER '用户名‘[@'主机名']
例子:
<?php
$conn = mysqli_connect("localhost", "root","admin","mysql");
if ($conn) {
echo "数据库连接成功\n";
} else {
echo mysqli_connect_error();
}
# SQL语句
$SQL = "DROP USER 'user1'@'%'";
# 执行
$result = mysqli_query($conn, $SQL);
# 查看是否执行成功
if ($result) {
echo "SQL 语句执行成功!\n";
}else {
echo mysqli_error($conn);
}
# 关闭连接
mysqli_close($conn);
?>
修改密码
格式:
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';
例子:
<?php
$conn = mysqli_connect("localhost", "root","admin","mysql");
if ($conn) {
echo "数据库连接成功\n";
} else {
echo mysqli_connect_error();
}
# SQL语句
$SQL = "ALTER USER 'root'@'localhost'
IDENTIFIED BY '123456'";
# 执行
$result = mysqli_query($conn, $SQL);
# 查看是否执行成功
if ($result) {
echo "SQL 语句执行成功!\n";
}else {
echo mysqli_error($conn);
}
# 关闭连接
mysqli_close($conn);
?>
权限管理
MySQL 使用GRANT
和REVOKE
进行授权, 撤销授权. 权限具体分为 3 类, 数据类, 结构类, 和管理类.
数据 | 结构 | 管理 |
---|---|---|
SELECT INSERT UPDATE DELETE FILE | CREATE ALTER INDEX DROP CREATE TEMPORARY TABLES SHOW VIEW CREATE ROUTINE ALTER ROUTINE EXECUTE CREATE VIEW EVENT TRIGGER | USAGE GRANT SUPER PROCESS RELOAD SHUTDOWN SHOW DATABASES LOCK TABLES REFERENCES REPUCATION CUENT REPUCATION SLAVE CREATE USER |
查看权限
格式:
SHOW GRANTS FOR '用户名'[@'主机名']
例子:
<?php
$conn = mysqli_connect("localhost", "root","admin");
if ($conn) {
echo "数据库连接成功\n";
} else {
echo mysqli_connect_error();
}
# SQL语句
$SQL = "SHOW GRANTS FOR 'root'@'localhost'";
# 执行
$result = mysqli_query($conn, $SQL);
# 查看是否执行成功
if ($result) {
echo "SQL 语句执行成功!\n";
}else {
echo mysqli_error($conn);
}
# 调试输出
while ($line = mysqli_fetch_assoc($result)) {
print_r($line);
}
# 关闭连接
mysqli_close($conn);
?>
输出结果:
数据库链接成功
SQL 语句执行成功!
Array
(
[Grants for root@localhost] => GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `root`@`localhost` WITH GRANT OPTION
)
Array
(
[Grants for root@localhost] => GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ADMIN,AUTHENTICATION_POLICY_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,GROUP_REPLICATION_STREAM,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PASSWORDLESS_USER_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO `root`@`localhost` WITH GRANT OPTION
)
Array
(
[Grants for root@localhost] => GRANT PROXY ON ``@`` TO `root`@`localhost` WITH GRANT OPTION
)
用户授权
格式:
GRANT ALL PRIVILEGES ON 数据库名.表名 TO '用户名'[@'主机名']
例子:
<?php
$conn = mysqli_connect("localhost", "root","admin");
if ($conn) {
echo "数据库连接成功\n";
} else {
echo mysqli_connect_error();
}
# SQL语句
$SQL = "GRANT ALL PRIVILEGES ON study.table1 TO 'user1'@'%'";
# 执行
$result = mysqli_query($conn, $SQL);
# 查看是否执行成功
if ($result) {
echo "SQL 语句执行成功!\n";
}else {
echo mysqli_error($conn);
}
# 关闭连接
mysqli_close($conn);
?>
撤销授权
REVOKE ALL PRIVILEGES ON 数据库名.表名 from '用户名'[@'主机名']
例子:
<?php
$conn = mysqli_connect("localhost", "root","admin");
if ($conn) {
echo "数据库连接成功\n";
} else {
echo mysqli_connect_error();
}
# SQL语句
$SQL = "REVOKE ALL PRIVILEGES ON study.table1 FROM 'user1'@'%'";
# 执行
$result = mysqli_query($conn, $SQL);
# 查看是否执行成功
if ($result) {
echo "SQL 语句执行成功!\n";
}else {
echo mysqli_error($conn);
}
# 关闭连接
mysqli_close($conn);
?>
刷新权限
格式:
FLUSH PRIVILEGES
注意事项
禁止 root 远程登录.
禁止 root 远程登录的原因:
root 是 MySQL 数据库的超级管理员. 几乎拥有所有权限, 一旦泄露后果非常严重
root 是 MySQL 数据库的默认用户. 如果不禁止远程登录, 则某些人可以针对 root 用户暴力破解密码
来源:https://iamarookie.blog.csdn.net/article/details/122532369
猜你喜欢
- 本文实例讲述了利用PHP函数计算中英文字符串长度的方法。分享给大家供大家参考。具体实现方法如下:一般来说大家知道英文字符占一个字节,而中文字
- 在开发数据库应用中,经常会遇到处理时间的问题,如查询指定时间的记录等。下面就这些常见的问题,结合自己的一些经验,和大家探讨一下这类问题。首先
- 这两天终于忍不住的去实验了一下,为什么网页的字体有时会显示成超级无敌难看的宋体呢?其实宋体不难看,难看的只是把它放在Leopard下,没有点
- 今天重新研究了下VB里面的ScriptControl组件,发现asp里面也能调用。研究了下方法,后来和lcx讨论了下。得到了如下代码,在此感
- 在DBA的日常工作中,经常需要重装或在新机器上安装Oracle,但每次安装所浪费的时间、精力以及失败的挫折都在考验着DBA的承受能力,本文着
- golang 字符串 int uint int64 uint64 互转字符串 转 intintNum, _ = strconv.Atoi(i
- 很多朋友对FrontPage2003中增加的网页布局功能很感兴趣,现在我们一起来深入了解这一实用功能。用FrontPage2003的“布局表
- 在.net 1.1中我们要实现压缩这一功能,一般都是用open source的SharpZipLib 或者调用
- 细线边框是网页中定位区分内容常用的一种方法,配合特定图片的使用,往往能够达到不错的效果,那么如何制作细线边框呢?asp之家注:现在要实现这个
- 背景在吉日嘎拉的软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)文章中关于MS SQL Server和Oracle对数据库事务处理的
- 在Twinsen Liang的博客上看到一篇名为语义化单单的限定在html么?的文章,文中主要是提及了CSS的命名规则,仔细阅读后,我认为这
- 在一篇文章中看到关于PHP引用的图解,对于加深对PHP引用的理解很有帮助,在这里备份一下。如果你对PHP的引用一点也不了解,可以先看我之前的
- 使用非对称加密主要是借助openssl的公钥和私钥,用公钥加密私钥解密,或者私钥加密公钥解密。1.安装openssl和php的openssl
- 其实网上已经有很多ASP生成htm的文章了,有一种方法是ASP+XML的生成方法,虽然有一种好处就是不用程序写模版就可以直接引用原来的要生成
- <% Function FileCounter(counter_file) Dim fs,txt,fi
- <script language="javascript"><!-- var&n
- 互联网时代数据是 * 式增长,我们常常需要把结构化数据和非结构化数据(如文档,演示文稿,视频,音频,图像)存储在一起。通常有几种方案: 1。在
- 如果不是因为总监审查严格,一定要求这个细节解决掉,也许我也不会去深究根源性的解决办法,再此感谢MTIME负责而严格的同事。首先描述一下问题:
- 请问如何从ASP连接到Oracle Server?可用下面的代码进行连接: <%@ Lan
- 在服务器端asp程序可以接受html页面上的form传来的参数,那么它又如何实现IE地址参数判断呢?当地址栏没有参数"id"时