mysql_auth/README.md

3.4 KiB

MySQL Authentication

Build Status

Plug Minetest's auth mechanism into a MySQL database.

Configuration

First, if mod security is enabled (secure.enable_security = true), this mod must be added as a trusted mod (in the secure.trusted_mods config entry). There is no other solution to make it work under mod security.

By default, mysql_auth doesn't run in singleplayer. This can be overriden by setting mysql_auth.enable_singleplayer to true.

Configuration may be done as regular Minetest settings entries, or using a config file, allowing for more configuration options; to do so specify the path as mysql_auth.cfgfile. This config must contain a Lua table that can be read by minetest.deserialize, i.e. a regular table definition follwing a return statement (see the example below).

When using flat Minetest configuation entries, all the following option names must be prefixed with mysql_auth.. When using a config file, entries are to be hierarchised as per the dot separator.

Values written next to option names are default values.

Database connection

Flat config file

db.host = 'localhost'
db.user = nil -- MySQL connector defaults to current username
db.pass = nil -- Using password: NO
db.port = nil -- MySQL connector defaults to either 3306, or no port if using localhost/unix socket
db.db = nil -- <== Setting this is required

Lua table config file

Connection options are passed as a table through the db.connopts entry. Its format must be the same as LuaPower's MySQL module mysql.connect(options_t) function, that is (all members are optional);

connopts = {
  host = ...,
  user = ...,
  pass = ...,
  db = ...,
  port = ...,
  unix_socket = ...,
  flags = { ... },
  options = { ... },
  attrs = { ... },
  -- Also key, cert, ca, cpath, cipher
}

Auth table schema finetuning

db.tables.auths.name = 'auths'
db.tables.auths.schema.userid = 'userid'
db.tables.auths.schema.userid_type = 'INT'
db.tables.auths.schema.username = 'username'
db.tables.auths.schema.username_type = 'VARCHAR(32)'
db.tables.auths.schema.password = 'password'
db.tables.auths.schema.password_type = 'VARCHAR(512)'
db.tables.auths.schema.privs = 'privs'
db.tables.auths.schema.privs_type = 'VARCHAR(512)'
db.tables.auths.schema.lastlogin = 'lastlogin'
db.tables.auths.schema.lastlogin_type = 'BIGINT'

The _type config entries are only used when creating an auth table, i.e. when db.tables.auths.name doesn't exist.

Examples

Example 1

Using a Lua config file

minetest.conf:

mysql_auth.cfgfile = /srv/minetest/skyblock/mysql_auth_config

/srv/minetest/skyblock/mysql_auth_config:

return {
  db = {
    connopts = {
      user = 'minetest',
      pass = 'BQy77wK$Um6es3Bi($iZ*w3N',
      db = 'minetest'
    },
    tables = {
      auths = {
        name = 'skyblock_auths'
      }
    }
  }
}

Using only Minetest config entries

minetest.conf:

mysql_auth.db.user = minetest
mysql_auth.db.pass = BQy77wK$Um6es3Bi($iZ*w3N
mysql_auth.db.db = minetest
mysql_auth.db.tables.auth.name = skyblock_auths

License

mysql_auth is licensed under GNU LGPLv3.

Using the Public Domain-licensed LuaPower mysql module.