SQL 사용 권한이 예기치 않게 작동함
최근에 pph와 sql을 배우기 시작한 이유는 프론트엔드에 대한 이해가 어느 정도 있어서 백엔드 시스템에 대한 이해를 강화하고 싶었기 때문입니다.라즈베리 파이를 사서 간단한 LAMP 서버를 설치했는데 잘 작동합니다.저는 좋은 출발을 할 수 있는 php form을 실행할 수 있습니다.
그러나 MariaDB v10.3.22를 설치했는데 문제가 많습니다.성공적으로 설치한 후 로그인을 했는데 빈 비밀번호가 필요했습니다.그게 안 먹혔어.
mysql -u root -p
오류가 납니다.ERROR 1698 (28000): Access denied for user 'root'@'localhost'
그리고 새로 설치한 것이기 때문에 시도해 보았습니다.
mysql_secure_installation
어쨌든, 결국 난 타이핑이sudo mysql -u root -p
비밀번호도 없이 날 들여보내줄 겁니다실제로 보안 설치를 실행하는 경우에도sudo
비밀번호를 정확하게 입력할 필요가 없다는 의미로 작동시켰습니다.sudo를 실행할 때 MariaDB shell과 secure script에 원하는 비밀번호를 입력할 수 있었고 root db 사용자와만 작동했습니다.왜 이러한가?왜 sudo가 이 모든 것을 우회할 수 있나요? 특히 저는 그 어떤 사용법도 보지 못했기 때문입니다.sudo
문서에.
완전한 권한을 가진 새 사용자를 만들었고 잘 작동합니다. sudo가 필요 없고 비밀번호도 실제로 작동합니다.
혼란스럽다면 죄송합니다만, 저도 마찬가지로 혼란스러워서 이것이 제가 설명할 수 있는 최선의 방법입니다.
고마워, 앵거스
이는 유닉스 소켓 인증 플러그인이 사용되고 있기 때문일 수 있습니다.root
사용자.
플러그인에 대한 설명서에 따르면 다음과 같습니다.
사용자는 unix_socket 인증 플러그인을 통해 로컬 Unix 소켓 파일을 통해 MariaDB에 연결할 때 운영 체제 자격 증명을 사용할 수 있습니다.
그
unix_socket
인증 플러그인은 다음을 호출하여 작동합니다.getsockopt
시스템과 통화SO_PEERCRED
socket option, 을 검색할 수 있게 해주는 socket option.uid
소켓에 연결되어 있는 프로세스의.그러면 다음과 연관된 사용자 이름을 가져올 수 있습니다.uid
. 사용자 이름이 있으면 연결 사용자를 동일한 사용자 이름을 가진 MariaDB 계정으로 인증합니다.
로 기록되지 않았다고 가정할 때root
셸 세션에서 실행하여sudo mysql -u root -p
명령을 실행하면 다음과 같습니다.root
, 그렇기 때문에 인증을 우회하는 것이 아니라 소켓 인증을 의도한 대로 사용하는 것입니다.OS 사용자가 MySQL 사용자와 일치하므로 암호가 필요하지 않습니다.
당신은 확인할 수 있습니다.root
소켓
MariaDB [(none)]> SELECT User, Host, plugin FROM mysql.user;
+------+-----------+-------------+
| User | Host | plugin |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+
또한 MySQL에서 동일한 상황을 다루는 이 다른 질문을 확인할 것을 제안합니다.
언급URL : https://stackoverflow.com/questions/61788386/sql-permissions-behaving-unexpectedly
'programing' 카테고리의 다른 글
명령줄 파워쉘 파라미터에서 앰퍼샌드, 세미콜론, 컬리브래시를 탈출하는 방법은? (0) | 2023.09.06 |
---|---|
부트스트랩 축소 애니메이션이 매끄럽지 않음 (0) | 2023.09.06 |
CSS 파일에서 상대 URL을 사용하면 어느 위치와 관련이 있습니까? (0) | 2023.09.06 |
Ajax와 같은 비동기 호출을 호출하는 동안 코드를 대기시키는 방법 (0) | 2023.09.06 |
iOS 이미지 방향에 이상한 동작이 있음 (0) | 2023.09.06 |