데이터 제어 언어(Data Control Language)는 데이터베이스 사용자 또는 역할 권한을 설정하거나 변경하는 데 사용되는 명령문입니다.
Level | Description |
---|---|
글로벌 레벨 | 에 적용됩니다. 해당 서버의 모든 데이터베이스는 mysql.user 테이블에 저장됩니다. |
데이터베이스 계층 구조는 | 해당 데이터베이스의 모든 대상에 적용됩니다. 이러한 권한은 mysql.db 및 mysql.host 테이블에 저장됩니다. |
은 해당 테이블의 모든 열에 적용됩니다. 이러한 권한은 mysql.tables_priv 테이블에 저장됩니다. | |
은 해당 테이블의 단일 열에 저장됩니다. | |
mysql.columns_priv 테이블의 CREATE ROUTINE, ALTER ROUTINE, EXECUTE 및 GRANT 권한은 저장된 서브루틴에 적용됩니다. 이러한 권한은 글로벌 레벨 및 데이터베이스 레벨 |
레코드를 기반으로 사용자의 권한을 확인합니다. 데이터베이스 관련 권한``column | |
---|---|
procs_priv | |
user에 대한 권한 | |
user의 권한 | |
MySQL에서는 CREATE USER를 사용하여 사용자를 생성한 후 사용자에게 권한이 없습니다. | 모든 사용자 보기: |
사용자 만들기 | MySQL 사용자 계정은 두 부분으로 구성됩니다. 사용자 이름 및 호스트 이름, 즉 사용자 이름@호스트 이름, 호스트 이름은 IP 또는 컴퓨터 이름일 수 있습니다. 호스트 이름%은 호스트가 어디서나 원격으로 MySQL 데이터베이스에 로그인할 수 있도록 허용한다는 의미입니다. |
사용자 생성 '사용자 이름' [@'호스트 이름'][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); ?>효과:
사용자 삭제형식:%
表示允许任何地方的主机远程登录 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 'user1'@'%'"; # 执行 $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 = "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); ?>修改密码
格式:
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 '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); ?>权限管理
MySQL 使用
GRANT
和REVOKE
DROP USER '사용자 이름‘[@'hostname']예:
GRANT🎜SUPER🎜PROCESS🎜RELOAD🎜SHUTDOWN 🎜Show Databases🎜LOCK TABLES🎜REFERENCES🎜REPUCATION CUENT🎜REPUCATION SLAVE🎜CREATE USER🎜🎜🎜 🎜<?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); ?>비밀번호 변경 형식: 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 'user1'@'%'"; # 执行 $result = mysqli_query($conn, $SQL); # 查看是否执行成功 if ($result) { echo "SQL 语句执行成功!\n"; }else { echo mysqli_error($conn); } # 关闭连接 mysqli_close($conn); ?>권한 관리MySQL에서는 USAGEGRANT
및REVOKE
를 사용하여 권한을 승인하고 취소합니다. 권한은 데이터 범주, 구조 범주, 관리 범주
3가지 범주로 나뉩니다.구조 FILE
management
SELECT
INSERT
UPDATE
DELETETRIGGER
CREATE
ALTER
INDEX
DROP
CREATE TEMPORARY TABLES
SHOW VIEW
CREATE ROUTINE
ALTER ROUTINE
EXECUTE
CREATE VIEW
EVENT查看权限
格式:
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 用户暴力破解密码
위 내용은 MySQL과 PHP의 데이터 제어 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!