programing

MySQL: 데이터베이스에 대한 **모든 ** 권한 부여

projobs 2022. 12. 20. 22:26
반응형

MySQL: 데이터베이스에 대한 **모든 ** 권한 부여

데이터베이스(예: 'mydb')를 만들었습니다.

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

이제 어디에서나 데이터베이스에 로그인할 수 있지만 테이블을 만들 수는 없습니다.

해당 데이터베이스 및 (향후) 테이블에 대한 모든 권한을 부여하는 방법.mydb' 데이터베이스에 테이블을 만들 수 없습니다.항상 얻을 수 있는 것:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

이것은, 「슈퍼 유저」권한을 작성하는 방법입니다(통상은 호스트를 지정합니다).

중요 사항

은 액세스 할 수 이 답변은 액세스 문제를 해결할 수 있습니다.WITH GRANT OPTION는 다른 사용자의 권한을 편집할 수 있는 MySQL 사용자를 만듭니다.

GRANT OPTION 권한을 사용하면 사용자가 소유한 권한을 다른 사용자에게 주거나 다른 사용자로부터 제거할 수 있습니다.

보안상의 이유로 일반인이 접근할 수 있는 프로세스(웹 사이트 등)에는 이러한 유형의 사용자 계정을 사용하지 마십시오.이러한 용도로는 데이터베이스 권한만 가진 사용자를 생성하는 것이 좋습니다.

이것은 오래된 질문이지만 나는 받아들여진 답이 안전하다고 생각하지 않는다.이는 슈퍼유저를 작성하는 데 도움이 되지만 단일 데이터베이스에 권한을 부여하려는 경우에는 좋지 않습니다.

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

% 것 .localhost를 위한 것입니다. WITH GRANT OPTION는 슈퍼 유저에게만 유효합니다.그렇지 않으면 보통 보안상의 리스크가 됩니다.

MySQL 5.7+ 업데이트에서는 다음과 같은 경고가 나타납니다.

GRANT 문을 사용하여 권한 이외의 기존 사용자 속성을 수정하는 것은 권장되지 않으며 이후 릴리스에서 제거됩니다.이 작업에는 ALTER USER 문을 사용합니다.

따라서 패스워드는 별도의 명령어로 설정해야 합니다.@scary-wombat 댓글 감사합니다.

ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

이것은 일부 사용자에게 도움이 됩니다.

MySQL 명령줄에서:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

유감스럽게도, 이 시점에서는 신규 사용자는 데이터베이스로 어떤 작업도 수행할 수 있는 권한이 없습니다.실제로 신규 사용자가 (비밀번호, 비밀번호로) 로그인하려고 해도 MySQL 쉘에 도달할 수 없습니다.

따라서 가장 먼저 해야 할 일은 사용자에게 필요한 정보에 대한 접근을 제공하는 것입니다.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

이 명령어의 아스타리스크는 액세스 가능한 데이터베이스와 테이블을 나타냅니다(각각 참조).이 특정 명령어를 사용하면 사용자는 모든 데이터베이스와 테이블에 걸친 모든 작업을 읽고 편집하고 실행할 수 있습니다.

새 사용자에 대해 설정할 권한을 완료한 후에는 항상 모든 권한을 새로고침해야 합니다.

FLUSH PRIVILEGES;

이제 변경 내용이 적용됩니다.

상세한 것에 대하여는, http://dev.mysql.com/doc/refman/5.6/en/grant.html 를 참조해 주세요.

명령줄에 익숙하지 않은 경우 MySQL 워크벤치, Navicat, SQLyog 등의 클라이언트를 사용할 수 있습니다.

1. 데이터베이스 작성

CREATE DATABASE db_name;

2. 데이터베이스 db_name 사용자 이름을 만듭니다.

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';

3. 데이터베이스를 사용한다.

USE db_name;

4. 마지막으로 데이터베이스 db_name에서 create, select 및 insert 조작 등의 명령을 실행합니다.

이 SQL은 기본 권한만 제외하고 모든 데이터베이스에 부여됩니다.Drupal이나 Wordpress에 충분하며, 지역 프로젝트에 대한 개발자 계정 하나를 허용합니다.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

스키마 권한에 대해 기능합니다. : )

옵션: 다음 후mypasswd추가할 수 있습니다.WITH GRANT OPTION

나는 단지 그것을 더해야만 그것을 작동시킬 수 있었다.GRANT OPTION그렇지 않으면 항상 권한 거부 오류를 수신합니다.

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;

안녕하세요 저는 이 코드를 사용하여 mysql에 슈퍼유저를 등록했습니다.

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
    CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
    EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
    LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
    SUPER
        ON *.* TO mysql@'%'
    WITH GRANT OPTION;

그리고 나서.

FLUSH PRIVILEGES;

MySQL Ver 8.0.21에서 작업할 때 이 문제가 있었습니다.

다음 이름의 데이터베이스에 대한 권한을 부여하려고 합니다.my_app_db에게root실행 중인 사용자localhost주인.

하지만 다음 명령을 실행하면

use my_app_db;

GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';

다음과 같은 에러가 표시됩니다.

ERROR 1064(42000):SQL 구문에 오류가 있습니다. MySQL Server 버전에 해당하는 설명서에서 'my_app_db' 근처에서 사용할 올바른 구문을 확인하십시오.* 행 1 >의 'root'@'localhost'로 이동합니다.

수정 방법은 다음과 같습니다.

MySQL 콘솔에 로그인합니다.변경할 수 있습니다.root로그인하는 사용자에게 :

mysql -u root -p

mysql 루트 비밀번호를 입력합니다.

그런 다음 MySQL 서버의 모든 사용자와 해당 호스트를 나열합니다.Postgre와 달리SQL 이것은 종종 에 저장됩니다.mysql데이터베이스입니다.그래서 우리는 그 중 하나를 골라야 한다.mysql데이터베이스 우선:

use mysql;
SELECT user, host FROM user;

주의: 를 실행하지 않으면use mysql, 를 입수할 수 있습니다.no database selected에러입니다.

그러면 다음과 같은 출력이 나타납니다.

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

다음으로 목록에서 얻은 정보를 기반으로 원하는 사용자에게 권한을 부여합니다.먼저 데이터베이스를 선택한 후 권한을 부여해야 합니다.저 같은 경우에는root에서 실행되는 사용자localhost호스트:

use my_app_db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';

주의:GRANT ALL PRIVILEGES ON database_name.* TO 'root'@'localhost';최신 버전의 MySQL에서는 명령어가 작동하지 않을 수 있습니다.대부분의 최신 버전의 MyQL은,database_name*사용할 데이터베이스를 선택한 후 grant privileges 명령어로 이동합니다.

그런 다음 MySQL 콘솔을 종료할 수 있습니다.

exit

바로 그겁니다.

이게 도움이 됐으면 좋겠다

원격 서버에서 mydb 데이터베이스에만 액세스하려면

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

원격 서버에서 모든 데이터베이스에 액세스합니다.

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';

데이터베이스의 모든 권한을 부여하려면 다음 절차를 수행합니다. mydb: " " " :myuser , "실행":

GRANT ALL ON mydb.* TO 'myuser'@'localhost';

또는 다음과 같이 입력합니다.

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

PRIVILEGES키워드는 필요 없습니다.

왜 이 '보다 낫다'는 것을 .IDENTIFIED BY 'password'명령어 끝에 놓입니다.을 사용하다

언급URL : https://stackoverflow.com/questions/5016505/mysql-grant-all-privileges-on-database

반응형