首頁 > 資料庫 > mysql教程 > MySQL與PHP的資料控制方法

MySQL與PHP的資料控制方法

王林
發布: 2023-06-03 16:04:04
轉載
1263 人瀏覽過

資料控制語言

資料控制語言(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與PHP的資料控制方法建立使用者

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 &#39;user1&#39;@&#39;%&#39;
        IDENTIFIED BY &#39;123456&#39;";

# 执行
$result = mysqli_query($conn, $SQL);

# 查看是否执行成功
if ($result) {
    echo "SQL 语句执行成功!\n";
}else {
    echo mysqli_error($conn);
}

# 关闭连接
mysqli_close($conn);

?>
登入後複製

效果:

##刪除用戶MySQL與PHP的資料控制方法

格式:

DROP USER '使用者名稱‘[@'主機名稱']

範例:

<?php

$conn = mysqli_connect("localhost", "root","admin","mysql");

if ($conn) {
    echo "数据库连接成功\n";
} else {
    echo mysqli_connect_error();
}

# SQL语句
$SQL = "DROP USER &#39;user1&#39;@&#39;%&#39;";

# 执行
$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 &#39;root&#39;@&#39;localhost&#39; 
        IDENTIFIED BY &#39;123456&#39;";

# 执行
$result = mysqli_query($conn, $SQL);

# 查看是否执行成功
if ($result) {
    echo "SQL 语句执行成功!\n";
}else {
    echo mysqli_error($conn);
}

# 关闭连接
mysqli_close($conn);

?>
登入後複製
權限管理

MySQL 使用

GRANT

REVOKE 授權, 撤銷授權. 權限具體分為3 類別, 資料類別, 結構類別, 和管理類別.

資料結構#管理 SELECTINSERTUPDATEINDEXSUPER#

查看权限

格式:

SHOW GRANTS FOR '用户名'[@'主机名']

例子:

<?php

$conn = mysqli_connect("localhost", "root","admin");

if ($conn) {
    echo "数据库连接成功\n";
} else {
    echo mysqli_connect_error();
}

# SQL语句
$SQL = "SHOW GRANTS FOR &#39;root&#39;@&#39;localhost&#39;";

# 执行
$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 &#39;user1&#39;@&#39;%&#39;";

# 执行
$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 &#39;user1&#39;@&#39;%&#39;";

# 执行
$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 用户暴力破解密码

以上是MySQL與PHP的資料控制方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
DELETE
FILE

#CREATE
ALTER
DROP
CREATE TEMPORARY TABLES
SHOW VIEW
CREATE ROUTINE
ALTER ROUTINE
EXECUTE
CREATE VIEW
EVENT
TRIGGER

USAGE
GRANT
PROCESS
RELOAD
SHUTDOWN
SHOW DATABASES
LOCK TABLES
REFERENCES
REPUCATION CUENT
REPUCATION SLAVE
CREATE USER