>데이터 베이스 >MySQL 튜토리얼 >MySQL과 PHP의 데이터 제어 방법

MySQL과 PHP의 데이터 제어 방법

王林
王林앞으로
2023-06-03 16:04:041263검색

데이터 제어 언어

데이터 제어 언어(Data Control Language)는 데이터베이스 사용자 또는 역할 권한을 설정하거나 변경하는 데 사용되는 명령문입니다.

테이블 수준은 해당 테이블의 모든 열에 적용됩니다. 이러한 권한은 mysql.tables_priv 테이블에 저장됩니다. 열 수준 은 해당 테이블의 단일 열에 저장됩니다. 서브루틴 레벨mysql.columns_priv 테이블의 CREATE ROUTINE, ALTER ROUTINE, EXECUTE 및 GRANT 권한은 저장된 서브루틴에 적용됩니다. 이러한 권한은 글로벌 레벨 및 데이터베이스 레벨
Level Description
글로벌 레벨 에 적용됩니다. 해당 서버의 모든 데이터베이스는 mysql.user 테이블에 저장됩니다.
데이터베이스 계층 구조는 해당 데이터베이스의 모든 대상에 적용됩니다. 이러한 권한은 mysql.db 및 mysql.host 테이블에 저장됩니다.
MySQL 권한 시스템

MySQL의 권한 정보는 주로 다음 테이블에 저장됩니다. 사용자가 데이터베이스에 연결하면 MySQL은 사용자 권한 테이블, 레코드 계정, 비밀번호 및 전역 권한 정보

dbprocs_provuser의 권한이 저장된 프로 시저 및 저장된 기능에 대한 columnuser의 권한이 소유 한 특정 테이블 권한에 대한 특정 테이블에 대한 특정 테이블에 대한 특정 테이블 column_privtable_priv사용자 관리사용자 만들기MySQL 사용자 계정은 두 부분으로 구성됩니다. 사용자 이름 및 호스트 이름, 즉 사용자 이름@호스트 이름, 호스트 이름은 IP 또는 컴퓨터 이름일 수 있습니다. 호스트 이름%은 호스트가 어디서나 원격으로 MySQL 데이터베이스에 로그인할 수 있도록 허용한다는 의미입니다.형식:
레코드를 기반으로 사용자의 권한을 확인합니다. 데이터베이스 관련 권한``column
procs_priv
user에 대한 권한
user의 권한
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 데이터 제어 방법MySQL과 PHP의 데이터 제어 방법

사용자 삭제

형식:

%表示允许任何地方的主机远程登录 MySQL 数据库.

格式:

CREATE USER '用户名' [@'主机名'][IDENTIFIED BY '密码'];

例子:

<?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);

?>

效果:

MySQL과 PHP의 데이터 제어 방법

删除用户

格式:

DROP USER '用户名‘[@'主机名']

例子:

<?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);

?>

修改密码

格式:

ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';

例子:

<?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);

?>

权限管理

MySQL 使用GRANTREVOKEDROP USER '사용자 이름‘[@'hostname']

예:
<?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);

?>
비밀번호 변경형식:ALTER USER 'Username'@'Hostname' IDENTIFIED BY 'New Password';예:
<?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);

?>
권한 관리 MySQL에서는 GRANTREVOKE를 사용하여 권한을 승인하고 취소합니다. 권한은 데이터 범주, 구조 범주, 관리 범주 FILETRIGGER USAGE




3가지 범주로 나뉩니다.
구조

management





SELECT
INSERT
UPDATE
DELETE

CREATE
ALTER
INDEX
DROP
CREATE TEMPORARY TABLES
SHOW VIEW
CREATE ROUTINE
ALTER ROUTINE
EXECUTE
CREATE VIEW
EVENT
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 &#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으로 문의하시기 바랍니다. 삭제