programing

MariaDB 10.3에서 특정 사용자에 대한 외부 액세스 허용

prostudy 2022. 9. 11. 16:33
반응형

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

반응형