관리자 Cheatsheet¶
Adminer - 데이터베이스 관리 도구
Adminer (이전 phpMinAdmin)는 PHP에서 작성된 전체 기능을 갖춘 데이터베이스 관리 도구입니다. 대상 서버에 배포 할 수있는 단일 PHP 파일로 구성됩니다. 관리자는 MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Elasticsearch, MongoDB 등에서 사용할 수 있습니다.
본문 바로가기¶
설치하기¶
기본 설치¶
카지노사이트
Docker 설치¶
카지노사이트
웹 서버 구성¶
카지노사이트
카지노사이트
PHP 요구 사항¶
카지노사이트
제품 설명¶
기본 설정¶
카지노사이트
환경 특정 구성¶
카지노사이트
플러그인 시스템¶
카지노사이트
Database 연결¶
연결 모수¶
카지노사이트
사이트맵 제품 설명¶
카지노사이트
연결 풀¶
ο 회원 관리
Database 운영¶
Database 관리¶
카지노사이트
Schema 운영¶
카지노사이트
백업 및 복원¶
카지노사이트
표 관리¶
테이블 창조¶
카지노사이트
테이블 수정¶
카지노사이트
인덱스 관리¶
카지노사이트
데이터 작업¶
데이터 삽입¶
카지노사이트
Data 업데이트¶
카지노사이트
데이터 삭제¶
오프화이트
데이터 쿼리¶
카지노사이트
SQL 편집기¶
Query 실행¶
오프화이트
Query 최적화¶
카지노사이트
저장된 절차 및 기능¶
카지노사이트
수입/ 수출¶
데이터 가져 오기¶
카지노사이트
카지노사이트
데이터 수출¶
카지노사이트
백업 및 복원¶
카지노사이트
```bash
Command-line backup scripts¶
MySQL backup¶
!/bin/bash¶
DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/backups" DB_NAME="myapp"
mysqldump -u backup_user -p$BACKUP_PASSWORD \ --single-transaction \ --routines \ --triggers \ --events \ --hex-blob \ --add-drop-table \ --add-locks \ \(DB_NAME > \(BACKUP_DIR/\)_\).sql
Compress backup¶
gzip \(BACKUP_DIR/\).sql}_${DATE
Keep only last 7 days¶
find \(BACKUP_DIR -name "\)_*.sql.gz" -mtime +7 -delete
PostgreSQL backup¶
!/bin/bash¶
DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/backups" DB_NAME="myapp"
pg_dump -U backup_user -h localhost \ --verbose \ --clean \ --create \ --if-exists \ --format=custom \ --compress=9 \ \(DB_NAME > \(BACKUP_DIR/\)_\).backup
Keep only last 7 days¶
find \(BACKUP_DIR -name "\)_*.backup" -mtime +7 -delete
Restore MySQL¶
mysql -u username -p myapp < backup_file.sql
Restore PostgreSQL¶
pg_restore -U username -h localhost -d myapp backup_file.backup ```의 경우
사용자 관리¶
사용자 생성 및 관리¶
```sql -- MySQL user management -- Create user CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'secure_password'; CREATE USER 'app_user'@'%' IDENTIFIED BY 'secure_password';
-- Grant privileges GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'app_user'@'localhost'; GRANT ALL PRIVILEGES ON myapp.* TO 'admin_user'@'localhost';
-- Create role (MySQL 8.0+) CREATE ROLE 'app_role'; GRANT SELECT, INSERT, UPDATE ON myapp.* TO 'app_role'; GRANT 'app_role' TO 'app_user'@'localhost';
-- Set default role SET DEFAULT ROLE 'app_role' TO 'app_user'@'localhost';
-- Show user privileges SHOW GRANTS FOR 'app_user'@'localhost';
-- Change password ALTER USER 'app_user'@'localhost' IDENTIFIED BY 'new_password';
-- Account locking/unlocking ALTER USER 'app_user'@'localhost' ACCOUNT LOCK; ALTER USER 'app_user'@'localhost' ACCOUNT UNLOCK;
-- Password expiration ALTER USER 'app_user'@'localhost' PASSWORD EXPIRE; ALTER USER 'app_user'@'localhost' PASSWORD EXPIRE NEVER;
-- Drop user DROP USER 'app_user'@'localhost';
-- PostgreSQL user management -- Create user CREATE USER app_user WITH PASSWORD 'secure_password'; CREATE USER readonly_user WITH PASSWORD 'readonly_password';
-- Create role CREATE ROLE app_role; CREATE ROLE readonly_role;
-- Grant privileges to role GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_role; GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_role;
-- Grant role to user GRANT app_role TO app_user; GRANT readonly_role TO readonly_user;
-- Grant database privileges GRANT CONNECT ON DATABASE myapp TO app_user; GRANT USAGE ON SCHEMA public TO app_user;
-- Change password ALTER USER app_user WITH PASSWORD 'new_password';
-- Drop user DROP USER app_user;
-- Show user information SELECT usename as username, usesuper as is_superuser, usecreatedb as can_create_db, userepl as can_replicate, valuntil as password_expiry FROM pg_user; ```에 대하여
권한 관리¶
```sql -- Granular permission management
-- Table-level permissions GRANT SELECT ON users TO 'readonly_user'@'localhost'; GRANT INSERT, UPDATE ON orders TO 'app_user'@'localhost'; GRANT DELETE ON logs TO 'admin_user'@'localhost';
-- Column-level permissions (MySQL 8.0+) GRANT SELECT (id, username, email) ON users TO 'limited_user'@'localhost'; GRANT UPDATE (email, updated_at) ON users TO 'profile_editor'@'localhost';
-- PostgreSQL column-level permissions GRANT SELECT (id, username, email) ON users TO limited_user; GRANT UPDATE (email, updated_at) ON users TO profile_editor;
-- Stored procedure permissions GRANT EXECUTE ON PROCEDURE GetUserStats TO 'app_user'@'localhost'; GRANT EXECUTE ON FUNCTION CalculateDiscount TO 'app_user'@'localhost';
-- View permissions CREATE VIEW user_summary AS SELECT id, username, email, created_at FROM users WHERE is_active = TRUE;
GRANT SELECT ON user_summary TO 'readonly_user'@'localhost';
-- Row-level security (PostgreSQL) ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
CREATE POLICY user_orders_policy ON orders FOR ALL TO app_user USING (user_id = current_setting('app.current_user_id')::INTEGER);
-- Set user context SET app.current_user_id = '123';
-- Revoke permissions REVOKE INSERT, UPDATE ON orders FROM 'app_user'@'localhost'; REVOKE ALL PRIVILEGES ON myapp.* FROM 'old_user'@'localhost';
-- Show effective permissions SELECT grantee, table_schema, table_name, privilege_type, is_grantable FROM information_schema.table_privileges WHERE grantee = 'app_user@localhost'; ```의 경우
보안 정책¶
```sql -- Password policies (MySQL 8.0+) -- Install password validation plugin INSTALL PLUGIN validate_password SONAME 'validate_password.so';
-- Configure password policy SET GLOBAL validate_password.policy = STRONG; SET GLOBAL validate_password.length = 12; SET GLOBAL validate_password.mixed_case_count = 1; SET GLOBAL validate_password.number_count = 1; SET GLOBAL validate_password.special_char_count = 1;
-- Account management policies CREATE USER 'temp_user'@'localhost' IDENTIFIED BY 'TempPassword123!' PASSWORD EXPIRE INTERVAL 30 DAY FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;
-- Connection limits ALTER USER 'app_user'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 1000 MAX_QUERIES_PER_HOUR 10000 MAX_UPDATES_PER_HOUR 5000;
-- PostgreSQL security policies -- Create security-focused role CREATE ROLE secure_app_role NOLOGIN NOCREATEDB NOCREATEROLE NOREPLICATION;
-- Grant minimal required privileges GRANT CONNECT ON DATABASE myapp TO secure_app_role; GRANT USAGE ON SCHEMA public TO secure_app_role; GRANT SELECT, INSERT, UPDATE ON users TO secure_app_role; GRANT SELECT ON products TO secure_app_role;
-- Create application user with secure role CREATE USER app_user WITH PASSWORD 'SecurePassword123!' IN ROLE secure_app_role VALID UNTIL '2024-12-31';
-- Audit user activities CREATE TABLE user_audit_log ( id SERIAL PRIMARY KEY, username VARCHAR(50), action VARCHAR(50), table_name VARCHAR(50), record_id INTEGER, old_values JSONB, new_values JSONB, timestamp TIMESTAMP DEFAULT NOW(), ip_address INET );
-- Audit trigger function CREATE OR REPLACE FUNCTION audit_trigger_function() RETURNS TRIGGER AS $$ BEGIN INSERT INTO user_audit_log ( username, action, table_name, record_id, old_values, new_values, ip_address ) VALUES ( current_user, TG_OP, TG_TABLE_NAME, COALESCE(NEW.id, OLD.id), CASE WHEN TG_OP = 'DELETE' THEN to_jsonb(OLD) ELSE NULL END, CASE WHEN TG_OP = 'INSERT' THEN to_jsonb(NEW) WHEN TG_OP = 'UPDATE' THEN to_jsonb(NEW) ELSE NULL END, inet_client_addr() );
RETURN COALESCE(NEW, OLD);
END; $$ LANGUAGE plpgsql;
-- Apply audit trigger to sensitive tables CREATE TRIGGER users_audit_trigger AFTER INSERT OR UPDATE OR DELETE ON users FOR EACH ROW EXECUTE FUNCTION audit_trigger_function(); ```에 대하여
계정 관리¶
오시는 길¶
```php
isAllowedIP()) { http_response_code(403); die('Access denied'); } } private function isAllowedIP() { $client_ip = $_SERVER['REMOTE_ADDR']; foreach ($this->allowed_ips as $allowed_range) { if ($this->ipInRange($client_ip, $allowed_range)) { return true; } } return false; } private function ipInRange($ip, $range) { if (strpos($range, '/') === false) { return $ip === $range; } list($subnet, $mask) = explode('/', $range); return (ip2long($ip) & ~((1 << (32 - $mask)) - 1)) === ip2long($subnet); } // Secure login function login($login, $password) { // Rate limiting session_start(); $attempts_key = 'login_attempts_' . $_SERVER['REMOTE_ADDR']; $attempts = $_SESSION[$attempts_key] ?? 0; if ($attempts >= 5) { $last_attempt = $_SESSION['last_attempt_' . $_SERVER['REMOTE_ADDR']] ?? 0; if (time() - $last_attempt < 300) { // 5 minutes lockout return false; } else { $_SESSION[$attempts_key] = 0; // Reset attempts } } // Validate credentials $valid_users = [ 'admin' => '$2y$10$hash_for_admin_password', 'readonly' => '$2y$10$hash_for_readonly_password' ]; if (isset($valid_users[$login]) && password_verify($password, $valid_users[$login])) { $_SESSION[$attempts_key] = 0; // Reset on successful login $_SESSION['user_role'] = $this->getUserRole($login); return true; } else { $_SESSION[$attempts_key] = $attempts + 1; $_SESSION['last_attempt_' . $_SERVER['REMOTE_ADDR']] = time(); return false; } } private function getUserRole($login) { $roles = [ 'admin' => 'admin', 'readonly' => 'readonly' ]; return $roles[$login] ?? 'readonly'; } // Restrict operations based on role function drop() { return $_SESSION['user_role'] === 'admin'; } function alter() { return $_SESSION['user_role'] === 'admin'; } function create() { return $_SESSION['user_role'] === 'admin'; } // Hide sensitive databases function databases($flush = true) { $all_databases = parent::databases($flush); $allowed_databases = [ 'myapp_prod', 'myapp_staging', 'analytics' ]; return array_intersect($all_databases, $allowed_databases); } // Log all activities function query($query, $start = null) { $result = parent::query($query, $start); // Log query $log_entry = [ 'timestamp' => date('Y-m-d H:i:s'), 'user' => $this->username(), 'ip' => $_SERVER['REMOTE_ADDR'], 'query' => $query, 'execution_time' => $start ? (microtime(true) - $start) : null ]; file_put_contents( '/var/log/adminer/queries.log', json_encode($log_entry) . "\n", FILE_APPEND | LOCK_EX ); return $result; } } // Use secure configuration new SecureAdminer; ?>```의 경우
데이터 보호¶
카지노사이트
사이트맵 제품 설명¶
카지노사이트
주문화¶
테마와 스타일링¶
카지노사이트
플러그인 개발¶
카지노사이트
최고의 연습¶
성능 최적화¶
카지노사이트
보안 경화¶
카지노사이트
정비 및 감시¶
```bash
!/bin/bash¶
Adminer maintenance script¶
Configuration¶
ADMINER_DIR="/var/www/adminer" LOG_DIR="/var/log/adminer" BACKUP_DIR="/backups/adminer" DATE=$(date +%Y%m%d_%H%M%S)
Create necessary directories¶
mkdir -p $LOG_DIR $BACKUP_DIR
Log rotation¶
find $LOG_DIR -name ".log" -size +100M -exec gzip {} \; find $LOG_DIR -name ".log.gz" -mtime +30 -delete
Security scan¶
echo "Running security scan..." grep -i "error|warning|failed" $LOG_DIR/audit.log | tail -20
Check for suspicious activity¶
echo "Checking for suspicious activity..." awk '{print $1}' $LOG_DIR/audit.log | sort | uniq -c | sort -nr | head -10
Performance monitoring¶
echo "Performance statistics:" awk '/execution_time/ {sum+=$2; count++} END {print "Average query time:", sum/count "s"}' $LOG_DIR/slow_queries.log
Disk space check¶
echo "Disk space usage:" df -h $ADMINER_DIR du -sh $LOG_DIR
Update check¶
echo "Checking for Adminer updates..." CURRENT_VERSION=$(grep -o 'version.*[0-9]+.[0-9]+.[0-9]+' $ADMINER_DIR/adminer.php | head -1) echo "Current version: $CURRENT_VERSION"
Backup configuration¶
echo "Creating configuration backup..." tar -czf \(BACKUP_DIR/adminer_config_\)DATE.tar.gz $ADMINER_DIR/*.php
Clean old backups¶
find $BACKUP_DIR -name "adminer_config_*.tar.gz" -mtime +7 -delete
echo "Maintenance completed at $(date)" ```의 경우
제품정보¶
Adminer는 단일 PHP 파일을 통해 종합적인 데이터베이스 관리 기능을 제공하는 경량의 강력한 데이터베이스 관리 도구입니다. 이 속임수 시트는 효과적인 데이터베이스 관리를위한 필수 기능, 보안 관행 및 사용자 정의 옵션을 포함합니다.
** 키 강도:** - ** 경량 : 단일 PHP 파일 배포 - **Multi-Database 지원 **: MySQL, PostgreSQL, SQLite 및 더 많은 것 - **User-Friendly Interface: 직관적인 웹 기반 인터페이스 - Extensible: 추가 기능을 위한 플러그인 시스템 - Secure: 내장 보안 기능과 사용자 정의 옵션
** 최고의 사용 사례:** - 빠른 데이터베이스 관리 작업 - 공유 호스팅 환경 - 개발 및 테스트 - 원격 데이터베이스 관리 - phpMyAdmin에 경량 대안
** 중요 고려 사항 : ** - 보안 구성은 생산용으로 중요합니다. - 큰 데이터베이스에 필요한 성능 최적화 - 보안 패치에 권장되는 일반 업데이트 - 접근 제한 및 IP 제한은 구현되어야 합니다 - 감사 로깅 준수 및 보안 모니터링에 필수적인
이 속임수 시트에 명시된 관행과 기법을 따르면, 데이터베이스 운영의 보안, 성능 및 신뢰성을 유지하면서 데이터베이스를 효과적으로 관리할 수 있습니다.
<문서> 기능 copyToClipboard () 이름 * const 명령어 = document.querySelectorAll('code'); let allCommands = ''; 명령. forEach(cmd =>의 경우 모든Commands +=cmd.textContent + navigator.clipboard.write텍스(allCommands); alert('모든 명령은 클립보드에 복사!'); 이름 *
함수 생성PDF() { 창. 인쇄 (); 이름 *