User Management

Learn how to create users, grant permissions, and manage database security in Machbase.

User Management Overview

Default User

Machbase comes with a default administrator:

  • Username: SYS
  • Password: MANAGER
  • Permissions: Full administrative rights

Important: Change the default password immediately!

ALTER USER SYS IDENTIFIED BY 'NewStr0ng!Password';

Creating Users

Basic User Creation

-- Create user
CREATE USER analyst IDENTIFIED BY 'password123';

-- Create with strong password
CREATE USER dataeng IDENTIFIED BY 'Str0ng!P@ss2025';

User Naming Rules

  • 1-128 characters
  • Letters, numbers, underscore
  • Case-insensitive
  • Cannot start with number

Granting Permissions

Table Permissions

-- Grant SELECT
GRANT SELECT ON sensors TO analyst;

-- Grant INSERT
GRANT INSERT ON sensors TO dataeng;

-- Grant multiple permissions
GRANT SELECT, INSERT ON sensors TO dataeng;

-- Grant all permissions on table
GRANT ALL ON sensors TO admin_user;

Database-Level Permissions

-- Grant SELECT on all tables
GRANT SELECT ON DATABASE TO readonly_user;

-- Grant all permissions
GRANT ALL ON DATABASE TO admin_user;

System Permissions

-- Grant user management permission
GRANT CREATE USER TO admin_user;

-- Grant table creation permission
GRANT CREATE TABLE TO developer;

Revoking Permissions

-- Revoke specific permission
REVOKE SELECT ON sensors FROM analyst;

-- Revoke multiple permissions
REVOKE INSERT, UPDATE ON sensors FROM dataeng;

-- Revoke all permissions
REVOKE ALL ON sensors FROM old_user;

Managing Users

View Users

-- List all users
SHOW USERS;

-- View user permissions
SELECT * FROM SYSTEM_.SYS_USERS_;

Change Password

-- Change own password
ALTER USER analyst IDENTIFIED BY 'NewPassword2025';

-- SYS can change any user's password
ALTER USER dataeng IDENTIFIED BY 'ResetPassword';

Delete User

-- Drop user
DROP USER analyst;

-- Drop user with cascade (remove all permissions)
DROP USER analyst CASCADE;

Permission Levels

Permission Matrix

PermissionSELECTINSERTUPDATEDELETECREATE TABLEDROP TABLE
READ_ONLY
DATA_WRITER
TABLE_ADMIN
SYS (Admin)

Common User Roles

Read-Only User

CREATE USER readonly IDENTIFIED BY 'password';
GRANT SELECT ON DATABASE TO readonly;

Data Analyst

CREATE USER analyst IDENTIFIED BY 'password';
GRANT SELECT ON sensors TO analyst;
GRANT SELECT ON logs TO analyst;
GRANT SELECT ON devices TO analyst;

Application User

CREATE USER app_user IDENTIFIED BY 'password';
GRANT SELECT, INSERT ON sensors TO app_user;
GRANT SELECT, INSERT ON logs TO app_user;

Administrator

CREATE USER admin IDENTIFIED BY 'password';
GRANT ALL ON DATABASE TO admin;
GRANT CREATE USER TO admin;

Security Best Practices

1. Strong Passwords

-- Good: Strong password
CREATE USER secure_user IDENTIFIED BY 'Tr0ng!P@ssw0rd#2025';

-- Bad: Weak password
CREATE USER weak_user IDENTIFIED BY 'password';  -- Don't do this!

Password Requirements:

  • Minimum 8 characters
  • Mix of upper/lowercase
  • Include numbers
  • Include special characters

2. Principle of Least Privilege

-- Grant only necessary permissions
CREATE USER report_user IDENTIFIED BY 'password';
GRANT SELECT ON sensors TO report_user;  -- Only SELECT, not INSERT/UPDATE/DELETE

3. Regular Password Rotation

# Quarterly password change policy
*/
ALTER USER analyst IDENTIFIED BY 'NewPasswordQ42025';

4. Remove Inactive Users

-- Regularly audit and remove
DROP USER inactive_user;

5. Separate Application Users

-- Don't use SYS for applications
-- Create dedicated app users
CREATE USER sensor_app IDENTIFIED BY 'password';
GRANT SELECT, INSERT ON sensors TO sensor_app;

Connection Examples

Connect as Specific User

# machsql
machsql -s localhost -u analyst -p password

# JDBC
jdbc:machbase://localhost:5656/MACHBASE?user=analyst&password=password

# Python
conn = machbase.connect('127.0.0.1', 5656, 'analyst', 'password')

Auditing

Monitor User Activity

-- Check active sessions
SHOW STATEMENTS;

-- View connection history (check logs)
-- $MACHBASE_HOME/trc/machbase.log

Log Analysis

# View recent logins
grep "LOGIN" $MACHBASE_HOME/trc/machbase.log | tail -20

# Check failed login attempts
grep "LOGIN FAILED" $MACHBASE_HOME/trc/machbase.log

Troubleshooting

Login Failed

# Check username exists
machsql -u SYS -p MANAGER -f - <<EOF
SHOW USERS;
EOF

# Reset password
machsql -u SYS -p MANAGER -f - <<EOF
ALTER USER analyst IDENTIFIED BY 'newpassword';
EOF

Permission Denied

-- Check user permissions
-- (Connect as SYS)
SELECT * FROM SYSTEM_.SYS_USERS_ WHERE name = 'ANALYST';

-- Grant missing permission
GRANT SELECT ON tablename TO analyst;

User Already Exists

-- Drop and recreate
DROP USER analyst;
CREATE USER analyst IDENTIFIED BY 'password';

Complete Examples

Example 1: Analytics Team

-- Create analysts
CREATE USER analyst1 IDENTIFIED BY 'Pass#2025!A1';
CREATE USER analyst2 IDENTIFIED BY 'Pass#2025!A2';

-- Grant read-only access
GRANT SELECT ON sensors TO analyst1;
GRANT SELECT ON sensors TO analyst2;
GRANT SELECT ON logs TO analyst1;
GRANT SELECT ON logs TO analyst2;
GRANT SELECT ON devices TO analyst1;
GRANT SELECT ON devices TO analyst2;

Example 2: Application Users

-- Sensor data collector
CREATE USER sensor_app IDENTIFIED BY 'SensApp#2025!';
GRANT INSERT ON sensors TO sensor_app;

-- Log collector
CREATE USER log_app IDENTIFIED BY 'LogApp#2025!';
GRANT INSERT ON logs TO log_app;

-- Dashboard application
CREATE USER dashboard IDENTIFIED BY 'Dash#2025!';
GRANT SELECT ON sensors TO dashboard;
GRANT SELECT ON logs TO dashboard;
GRANT SELECT ON devices TO dashboard;

Example 3: External Partner

-- Limited access for partner
CREATE USER partner IDENTIFIED BY 'Partner#2025!';

-- Only specific table and time range
GRANT SELECT ON public_sensors TO partner;

-- Restrict via application logic (not SQL)
-- Application enforces: DURATION 7 DAY only

User Management Script

#!/bin/bash
# user_management.sh

# Create new user
create_user() {
    local username=$1
    local password=$2

    machsql -u SYS -p MANAGER -f - <<EOF
CREATE USER $username IDENTIFIED BY '$password';
EOF
}

# Grant permissions
grant_select() {
    local username=$1
    local table=$2

    machsql -u SYS -p MANAGER -f - <<EOF
GRANT SELECT ON $table TO $username;
EOF
}

# Usage
create_user "newanalyst" "SecurePass#2025"
grant_select "newanalyst" "sensors"
grant_select "newanalyst" "logs"

Next Steps


Proper user management ensures secure and controlled access to your Machbase data!

Last updated on