현재 사용자가 MySQL/MariaDB에 대한 특정 권한을 가지고 있는지 확인하려면 어떻게 해야 합니까?
현재 사용자에게 특정 권한이 있는지 여부를 쉽게 확인할 수 있는 방법(예: 다음 명령어를 실행할 수 있는지 여부)
INSERT INTO testdb (id) VALUES ('1');
물론 시도해 볼 수는 있지만 어떤 것을 넣어야 할지 알기 전에 정보가 필요합니다.DELETE 권한이 없기 때문에 아무것도 넣지 않습니다.사용.SHOW GRANTS;
매우 복잡하기 때문에 충분하지 않습니다.예를 들어, 직접, 역할을 통해서, 호스트에게만, 여러가지 특권을 가질 수 있기 때문입니다.
제 특권을 확인할 수 있는 더 쉬운 방법은 없나요?
정말 감사합니다!
를 사용할 수 있습니다.INFORMATION_SCHEMA
실행할 필요가 있는 액션을 기반으로 필요한 권한을 쿼리합니다.
SELECT IF(COUNT(*) > 0, TRUE, FALSE) AS Allowed
FROM INFORMATION_SCHEMA.USER_PRIVILEGES
WHERE GRANTEE LIKE '%user%' AND PRIVILEGE_TYPE = 'INSERT'
코멘트에 기재되어 있는 시작/롤백 방식은 비용이 많이 들고 트랜잭션 이외의 스토리지 엔진에서는 사용할 수 없습니다.
MariaDB와 MySQL은 모두 사용자가 실행하지 않는 준비된 스테이트먼트를 제공합니다.준비 중에 서버는 이미 권한을 확인하고 오류를 반환합니다.
C의 예:
const char *stmt_str= "INSERT INTO t2 VALUES (?)";
if (mysql_stmt_prepare(stmt, stmt_str, strlen(stmt_str))
{
printf("Error: %s\n", mysql_stmt_error(stmt));
}
SQL의 예:
mysql> prepare my from "insert into t2 values (?)";
ERROR 1142 (42000): INSERT command denied to user 'foo'@'localhost' for table 't2'
그러나 이 솔루션은 일부 SQL 문을 준비할 수 없기 때문에 제한적입니다.허용된 스테이트먼트 목록은 MariaDB Documentation에서 확인할 수 있습니다.
prepare 명령어가 성공했을 경우, 준비된 스테이트먼트를 해방하는 것을 잊지 말아 주세요.
SELECT, INSERT, UPDATE, DELETE 권한만 선택하면 권한을 확인하는 EXPLINE 명령을 사용할 수도 있습니다.
언급URL : https://stackoverflow.com/questions/58012006/how-can-i-check-if-current-user-has-certain-privilege-on-mysql-mariadb
'programing' 카테고리의 다른 글
PyTorch에서 모델 요약을 인쇄하려면 어떻게 해야 합니까? (0) | 2022.11.02 |
---|---|
PHP DateInterval에서 총 시간(초)을 계산합니다. (0) | 2022.11.02 |
phpMyAdmin에서 MySQL 쿼리를 기반으로 CSV 생성 (0) | 2022.11.02 |
MySQL - 기존 데이터를 중단하지 않고 데이터베이스 내 기존 열의 varchar 크기를 늘리는 방법 (0) | 2022.11.02 |
mysql을 mysqli로 변경하는 방법 (0) | 2022.11.02 |