Selected topic
Database Security
Prefer practical output? Use related tools below while reading.
sql
-- Bad practice: concatinate user input with SQL code
SELECT * FROM users WHERE username = '$username' AND password = '$password';-- Good practice: use prepared statement with parameterized query
PREPARE stmt FROM 'SELECT * FROM users WHERE username = ? AND password = ?';
EXECUTE stmt USING @username, @password;
sql
-- Bad practice: check user input against a fixed string
IF username = 'admin' THEN
// allow access-- Good practice: white listing using regular expressions
IF username REGEXP '^[a-zA-Z0-9]{3,}$' THEN
// allow access
sql
-- Bad practice: store raw user input in database
INSERT INTO users (username, password) VALUES ('$username', '$password');-- Good practice: validate user input before storing it
IF strlen(username) <= 20 AND strlen(password) >= 8 THEN
INSERT INTO users (username, password) VALUES (username, hash_password(password));
sql
-- Bad practice: grant broad privileges to database account
GRANT ALL PRIVILEGES ON . TO 'myapp'@'%';-- Good practice: limit privileges to specific schema and tables
GRANT SELECT, INSERT, UPDATE ON myapp_schema.* TO 'myapp'@'%';
sql
-- Bad practice: ignore database logs
// do nothing-- Good practice: set up log monitoring and alerting
LOG_QUERY 'SELECT * FROM users WHERE username = ? AND password = ?',
(username, password);
By implementing these best practices, database administrators can significantly reduce the risk of SQL Injection attacks and protect their databases from malicious activities.