programing

mysql 사용자가 존재하는지 확인하는 중

topblog 2023. 10. 10. 20:03
반응형

mysql 사용자가 존재하는지 확인하는 중

사용자가 존재하는지 확인하려면 어떻게 해야 합니까?

mysql 데이터베이스에 대한 설치 관리자를 하고 있는데 사용자를 만들지 않으면 사용자가 종료되는지, 사용자를 삭제하고 다시 생성하는지 확인해야 합니다.

이것은 제가 걱정 없이 대본을 실행할 수 있게 해줍니다.

감사해요.

MySQL은 다음과 같은 테이블에 사용자 데이터를 저장합니다.user데이터베이스에mysql(기본값).다음 쿼리가 반환됩니다.1지정된 사용자 이름을 가진 사용자가 존재하는 경우,0그렇지않으면.

SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'username')

어쨌든 MySQL 사용자를 삭제하는 경우, 먼저 존재하는지 확인할 필요가 없습니다.MySQL은 삭제할 내용이 없으면 오류를 발생시키지 않습니다.

DELETE FROM mysql.user WHERE User = 'username';

MySQL의 최신 버전에서는 다음 옵션을 사용할 수 있습니다.

DROP USER IF EXISTS 'username'@'host';

삭제하지 않고 사용자가 존재하는지 확인해야 할 때(예: 어떤 경우에도 명령을 실행하는 대신 일부 명령을 건너뛸 때), 이를 사용할 수 있습니다(여기서).$USER확인할 사용자):

if [ $(echo "SELECT COUNT(*) FROM mysql.user WHERE user = '$USER'" | mysql | tail -n1) -gt 0 ]
then
  echo "User exists"
else
  echo "User doesn't exist"
fi

NB:

  • mysql명령을 사용하려면 인증에 추가 아르그 및/또는 구성이 필요함)
  • tail -n1쿼리 결과 헤더를 제거하는 데 사용됩니다.

MySQL에 DROP USER가 부족합니다.

좋은 해결책은 사용자를 떨어뜨리기 전에 무해한 권한을 부여하는 것입니다.이렇게 하면 사용자가 존재하지 않을 경우 사용자가 생성되어 다음과 같이 안전하게 드롭할 수 있습니다.

GRANT USAGE ON *.* TO 'username'@'localhost';
DROP USER 'username'@'localhost';
FLUSH PRIVILEGES;

USE는 실제로 권한이 없음을 의미합니다.

출처 : http://bugs.mysql.com/bug.php?id=19166

이렇게 할 수 있었습니다.

#!/usr/bin/env bash

set -o errexit
set -o nounset

# Create credentials file
echo -e "[client]\nuser=root\npassword=${MYSQL_ROOT_PASSWORD}" > ~/.my.cnf

# Create standard user and grant permissions
if ! echo "SELECT COUNT(*) FROM mysql.user WHERE user = 'myuser';" | mysql | grep 1 &> /dev/null; then
    echo "Creating database user ..."
    echo "CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
          GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
          FLUSH PRIVILEGES;" | mysql
else
    echo "Database user already created. Continue ..."
fi

바꾸다myuser,mydatabase그리고.mypassword따라서.

MySQL 5.7은 이미 다음을 포함하고 있지만 이전 버전의 경우 Percona-toolkit에서 사용하고 피드백합니다.DROP USERmysql에 대한 부분:

pt-show-grants --drop --only=$username | grep '^DROP USER' | mysql -v

사용자 이름과 호스트 이름 쌍이 여러 개인 경우 이를 모두 제거합니다.

언급URL : https://stackoverflow.com/questions/3049929/checking-if-mysql-user-exists

반응형