Nice programing

MySql : 읽기 전용 옵션을 부여 하시겠습니까?

nicepro 2020. 10. 9. 12:23
반응형

MySql : 읽기 전용 옵션을 부여 하시겠습니까?


DB 스키마에 대한 모든 READ 권한을 부여하려는 사용자가 있습니다.

한 가지 방법은 다음과 같습니다.

GRANT SELECT, SHOW_VIEW  ON test.* TO 'readuser'@'%';

모든 읽기 작업을 허가로 그룹화하는 방법이 있습니까?


데이터베이스에 대한 모든 읽기 작업을 나타내는 단일 권한이있는 경우.

"모든 읽기"를 정의하는 방법에 따라 다릅니다.

테이블과 뷰에서 "읽기"는 SELECT특권입니다. 이것이 "모두 읽음"의 의미 인 경우 예 :

GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';

그러나 그것은 당신이 모든 것을 "볼 수있는"능력, "보지만 만지지 않는"능력을 의미하는 것처럼 들립니다. 여기에 떠오르는 다른 종류의 독서가 있습니다.

뷰의 정의를 "읽는"것은 SHOW VIEW특권입니다.

다른 사용자가 현재 실행중인 쿼리 목록을 "읽는" PROCESS권한이 있습니다.

현재 복제 상태를 "읽는"것이 REPLICATION CLIENT권한입니다.

이들 중 일부 또는 전부는 해당 사용자의 특성에 따라 노출하려는 것보다 더 많은 정보를 노출 할 수 있습니다.

그것이 당신이 원하는 읽기라면, 그것들 중 하나 (또는 사용 가능한 다른 권한들 )를 하나의 GRANT문장으로 결합 할 수 있습니다 .

GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...

그러나 다른 권한의 일부 하위 집합을 부여하는 단일 권한은 없습니다.

수동으로 작업을 수행하고 특정 사용자 클래스에 대해 일반적으로 부여하는 정확한 부여를 기억할 필요없이이 작업을 더 쉽게 수행 할 수있는 방법을 찾고 있다면, 비슷한 사용자의 부여를 재생성하고이를 변경할 수있는 문을 찾을 수 있습니다. 비슷한 권한을 가진 새 사용자를 만들려면 :

mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for not_leet@localhost                                                                                                      |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

암호와 함께 추가하려는 새 사용자와 일치하도록 'not_leet'및 'localhost'를 변경하면 새 사용자 GRANT를 만드는 재사용 가능한 문이 생성됩니다.

한 번의 작업으로 제한된 권한 집합을 설정하고 사용자에게 부여하고, 장점이없는 권한을 제거하려면 수행하려는 모든 것을 캡슐화하는 저장 프로 시저를 만들어 수행 할 수 있습니다. 프로 시저 본문 내에서 GRANT동적 SQL을 사용하여 문을 작성하거나 그랜트 테이블 자체를 직접 조작합니다.

에서 데이터베이스 관리자에이 최근 문제 정의에 꽤 많은 다른 사용자입니다을 수정할 수있는 사용자가 아닌 - 포스터는 일반적으로 할 수있는 일이 아닙니다 물론 다른 사용자를 수정할 수있는 권한이없는 사용자의 능력을 원했다 그러나 권한이없는 사용자는 저장 프로 시저가 해당 DEFINER사용자 의 보안 컨텍스트로 실행 되므로 EXECUTE프로 시저에 대한 권한이있는 모든 사용자 가 일시적으로 상승 된 권한을 가정하여 특정 작업을 수행 할 수 있기 때문에 좋은 솔루션을 제공했습니다 . 절차가 완료됩니다.


GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';

이것은 SELECT뷰를 포함한 모든 데이터베이스에 대한 권한을 가진 사용자를 생성합니다 .


사용자에게 부여 할 수있는 다양한 권한은

ALL PRIVILEGES- This would allow a MySQL user all access to a designated database (or if no database is selected, across the system)
CREATE- allows them to create new tables or databases
DROP- allows them to them to delete tables or databases
DELETE- allows them to delete rows from tables
INSERT- allows them to insert rows into tables
SELECT- allows them to use the Select command to read through databases
UPDATE- allow them to update table rows
GRANT OPTION- allows them to grant or remove other users' privileges

특정 사용자에게 권한을 제공하려면 다음 프레임 워크를 사용할 수 있습니다.

GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;

기사가 매우 유용 하다는 것을 알았습니다.


여기 에서 찾은 단계별 가이드 .

MySQL에 대한 읽기 전용 데이터베이스 사용자 계정을 만들려면

UNIX 프롬프트에서 MySQL 명령 줄 프로그램을 실행하고 다음 명령을 입력하여 관리자로 로그인합니다.

mysql -u root -p

루트 계정의 비밀번호를 입력하십시오. mysql 프롬프트에서 다음 단계 중 하나를 수행하십시오.

사용자에게 호스트에서 데이터베이스에 대한 액세스 권한을 부여하려면 다음 명령을 입력하십시오.

grant select on database_name.* to 'read-only_user_name'@'%' identified by 'password';

수집기가 데이터베이스와 동일한 호스트에 설치되는 경우 다음 명령을 입력합니다.

grant select on database_name.* to 'read-only_user_name' identified by 'password';

이 명령은 사용자에게 로컬 호스트에서만 데이터베이스에 대한 읽기 전용 액세스 권한을 부여합니다. 콜렉터가 설치 될 호스트의 호스트 이름 또는 IP 주소를 알고있는 경우 다음 명령을 입력하십시오.

grant select on database_name.* to 'read-only_user_name'@'host_name or IP_address' identified by 'password';

The host name must be resolvable by DNS or by the local hosts file. At the mysql prompt, type the following command:

flush privileges;

Type quit.

The following is a list of example commands and confirmation messages:

mysql> grant select on dbname.* to 'readonlyuser'@'%' identified 
by 'pogo$23';
Query OK, 0 rows affected (0.11 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit

Even user has got answer and @Michael - sqlbot has covered mostly points very well in his post but one point is missing, so just trying to cover it.

If you want to provide read permission to a simple user (Not admin kind of)-

GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';

Note: EXECUTE is required here, so that user can read data if there is a stored procedure which produce a report (have few select statements).

Replace localhost with specific IP from which user will connect to DB.

Additional Read Permissions are-

  • SHOW VIEW : If you want to show view schema.
  • REPLICATION CLIENT : If user need to check replication/slave status. But need to give permission on all DB.
  • PROCESS : If user need to check running process. Will work with all DB only.

If you want the view to be read only after granting the read permission you can use the ALGORITHM = TEMPTABLE in you view DDL definition.


Note for MySQL 8 it's different

You need to do it in two steps:

CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;

참고URL : https://stackoverflow.com/questions/20036547/mysql-grant-read-only-options

반응형