MariaDB 10.3에서 특정 사용자에 대한 외부 액세스 허용
MariaDB 10.3에 대한 제한된 외부 액세스를 설정하려고 합니다.
내가 원하는 것
사용자는 외부 액세스에서만 보기에 액세스할 수 있지만 암호를 가지고 있더라도 루트로 연결할 수 없습니다.
초기 설정
디폴트 단조 설정을 사용하여 다음 사용자부터 시작합니다.
$ mysql -u root -p
> use information_schema;
> select * from user_privileges;
전체 결과: https://pastebin.com/kNNVUjrz
TLDR;
2개의 루트 사용자:
root
접속처 : [localhost
,127.0.0.1
,::1
,51.99.999.101
*,%
]forge
접속처 : [51.99.999.101
*,%
]
이상한 사용자:
debian-sys-maint
접속처 : [localhost
]
* 이것은 명백히 가짜 퍼블릭 IP입니다.
원하는 구성
root
접속처 : [localhost
,127.0.0.1
,::1
,51.99.999.101
]forge
접속처 : [localhost
,127.0.0.1
,::1
,51.99.999.101
]dummyuser
액세스 가능한 폼 : [%
]
문제는
사용자를 삭제할 때'forge'@'%'
하지만 계속'forge'@'localhost'
, 사용자(dummyuser
)의 특권은 없어졌습니다.
ERROR 1045 (28000): Access denied for user 'dummyuser'@'%' (using password: YES)
내가 한 상보
시큐어 셸을 통해 서버에 연결할 수 있다.
$ mysql -u forge -p
> create database mydb;
> create view mydb.v as select user();
> create user dummyuser identified by 'password';
> grant select on mydb.v to dummyuser;
> select * from information_schema.user_privileges where grantee like '%dummyuser%';
- 허가자:
'dummyuser'@'%'
- 표_카탈로그:
def
- 특권_타입:
USAGE
- IS_GRANTABLE:
NO
내 PC를 통해 연결되어.
$ mysql -u dummyuser -h 51.99.999.101 -p
> select * from mydb.v;
원하는 것을 반환합니다.dummyuser@adsl-178-xx-xxx-123.adslplus.ch
하지만 이제 사용자를 삭제하면'forge'@'%'
SSH 경유(이번에는 루트 포함):
중요사항:더미 유저를 작성하기 전에 이 순서를 실행해도 문제는 해결되지 않았습니다.
$ mysql -u root -p
> drop user 'forge'@'%';
> create user 'forge'@'localhost' identified by 'passowrd';
> grant all privileges on *.* to 'forge'@'localhost' with grant option;
> flush privileges;
문제는 다음과 같습니다.로그온할 때dummyuser
다시 시도합니다.
$ mysql -u dummyuser -h 51.99.999.101 -p
> select * from mydb.v;
ERROR 1045 (28000): Access denied for user 'dummyuser'@'%' (using password: YES)
우선 허가 테이블에 어떤 행이 있는지 확인합니다.이미 실행한 것처럼 보이지만 다음 두 단계를 수행합니다.
SELECT user, host FROM mysql.user;
그런 다음 각각에 대해 (와 함께)...
적절히 기입) :
SHOW GRANTS FOR '...'@'...'
자, 이제,GRANT ... TO ...
그 진술들을 만들어내고, 그것들을 만들어 냈던 진술들REVOKE ... FROM ...
(password 구를 삭제합니다).
실행하다REVOKEs
새로운 제품도 추가GRANTs
필요하죠.하지만 오타가 당신을 고립시키지 않도록 하세요.다른 곳에 연결하여 결과를 확인하는 동안 계속 연결합니다.
@rick-james의 도움으로 나는 작업 케이스를 얻었다.
사용자를 생성(재작성공해야 했습니다.'forge'@'%'
와 같은 제한적인 접근을 가지고 있다'dummyuser'@'%'
.
'forge'@'localhost'
keep is 특권root
> show grants for root@localhost;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*****' WITH GRANT OPTION
GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
> show grants for forge@localhost;
GRANT ALL PRIVILEGES ON *.* TO 'forge'@'localhost' IDENTIFIED BY PASSWORD '*****' WITH GRANT OPTION
> show grants for 'forge'@'%';
GRANT USAGE ON *.* TO 'forge'@'%' IDENTIFIED BY PASSWORD '*****'
GRANT SELECT ON `mydb`.`v` TO 'forge'@'%'
> show grants for 'dummyuser'@'%';
GRANT USAGE ON *.* TO 'dummyuser'@'%' IDENTIFIED BY PASSWORD '*****'
GRANT SELECT ON `mydb`.`v` TO 'dummyuser'@'%'
이 시점에서dummyuser3@%
사용자와 함께forge@localhost
그리고 그에게 허락한다:grant select on mydb.v to dummyuser3;
dummyuser3는 뷰를 선택할 수 있습니다.
사용자가 액세스 할 수 있는 경우forge@%
제한사항으로 인해 뷰만 선택할 수 있습니다.그것은 받아들일 수 있는 해결책이다.
[편집] 다음 시나리오에서 동작합니다.create view mydb.v as select user();
현실에서, 제 견해는 다른 표에 근거하고 있습니다.이 경우 사용자는'forge'@'%'
에는 해당 테이블에서 선택할 수 있는 권한도 필요합니다.이것은 그다지 받아들여지지 않는 해결책입니다.하지만 그게 내가 가진 전부야.
결론적으로, 그 질문은 아직 미해결이다.
언급URL : https://stackoverflow.com/questions/53668369/allow-external-access-to-specific-user-in-mariadb-10-3
'programing' 카테고리의 다른 글
MySQL 8.x의 주요 버그 -- 외부 키 (0) | 2022.09.11 |
---|---|
Java의 3차 연산자는 Java 7 이후 하나의 표현식만 평가합니다. Java 1.6 이하에서는 다른가요? (0) | 2022.09.11 |
"Type List 표현식에 선택되지 않은 변환 필요..."를 수정하려면 어떻게 해야 합니까? (0) | 2022.09.11 |
Android JSONObject - 플랫 JSON 객체를 루프하여 각 키와 값을 얻는 방법 (0) | 2022.09.11 |
ES6/2015의 특수 안전 자산 액세스(및 조건부 할당) (0) | 2022.09.11 |