programing

사용자를 작성하고 Maria의 특정 데이터베이스에 대한 액세스를 취소합니다.DB

jooyons 2023. 10. 2. 15:00
반응형

사용자를 작성하고 Maria의 특정 데이터베이스에 대한 액세스를 취소합니다.DB

사용자를 생성하고 특정 데이터베이스를 제외한 모든 데이터베이스에 권한을 부여할 수 있는 쉬운 방법이 있습니까?

이거 먹어봤어요.

CREATE USER 'demo'@'%' IDENTIFIED BY 'QbSv9qUj2EJ8mxm2';
GRANT ALL PRIVILEGES ON *.* TO 'demo'@'%';
REVOKE ALL ON id8694160_sqless.* FROM 'demo'@'%'; -- this is the DB I don't want the user to have access to
SHOW GRANTS FOR 'demo'@'%';

하지만 다음과 같은 오류가 발생합니다.

Error Code: 1141. There is no such grant defined for user 'demo' on host '%'

이게 가능하긴 해요?

문서에 의하면 다음과 같습니다.

글로벌 권한은 priv_level의 *.*를 사용하여 부여됩니다.글로벌 권한에는 데이터베이스를 관리하고 사용자 계정을 관리할 수 있는 권한과 모든 테이블, 기능 및 프로시저에 대한 권한이 포함됩니다.글로벌 권한은 mysql.user 테이블에 저장됩니다.

db_name을(를) 사용하여 데이터베이스 권한을 부여합니다.* priv_level의 경우 또는 *만 사용하여 기본 데이터베이스를 사용합니다.데이터베이스 권한에는 테이블과 함수를 만들 수 있는 권한과 데이터베이스의 모든 테이블, 함수 및 프로시저에 대한 권한이 포함됩니다.데이터베이스 권한은 mysql.db 테이블에 저장됩니다.

당신이 부여하는 권한은GRANT ALL PRIVILEGES ON *.* TO 'demo'@'%';mysql.user 테이블에서 하나의 행으로 표시됩니다.이러한 글로벌 권한에서 하나의 데이터베이스에 대한 권한만 취소하면 mysql.user 테이블에서 글로벌 권한을 제거하고 mysql.db 테이블에서 id8694160_sqless 데이터베이스를 제외한 각 데이터베이스에 대해 하나의 데이터베이스 권한을 추가합니다.

저는 확신합니다.REVOKEstatement는 이 작업을 수행하지 않지만 다음과 같은 요청이 있는 데이터베이스를 제외한 모든 데이터베이스에 권한을 수동으로 부여할 수 있습니다.

INSERT INTO mysql.db
SELECT '%',schema_name,'demo','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'
FROM information_schema.schemata
WHERE NOT schema_name = 'mysql'
AND NOT schema_name = 'information_schema'
AND NOT schema_name = 'performance_schema'
AND NOT schema_name = 'id8694160_sqless';
FLUSH PRIVILEGES;

언급URL : https://stackoverflow.com/questions/56607236/create-user-and-revoke-them-access-to-a-specific-database-on-mariadb

반응형