diff --git a/lib/hawat/migrations/versions/432c8bc8e49b_lowercase_check.py b/lib/hawat/migrations/versions/432c8bc8e49b_lowercase_check.py
new file mode 100644
index 0000000000000000000000000000000000000000..0ab6aeabbbd1df0a6db8ede6920f1c7409b933ad
--- /dev/null
+++ b/lib/hawat/migrations/versions/432c8bc8e49b_lowercase_check.py
@@ -0,0 +1,23 @@
+"""Lowercase check constraint
+
+Revision ID: 432c8bc8e49b
+Revises: 426e6e986b40
+Create Date: 2022-07-19 11:48:46.111909
+
+"""
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = '432c8bc8e49b'
+down_revision = '426e6e986b40'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    op.execute("ALTER TABLE users ADD CONSTRAINT login_lowercase CHECK (login = lower(login))")
+    op.execute("ALTER TABLE users ADD CONSTRAINT email_lowercase CHECK (email = lower(email))")
+
+def downgrade():
+    op.execute("ALTER TABLE users DROP CONSTRAINT login_lowercase")
+    op.execute("ALTER TABLE users DROP CONSTRAINT email_lowercase")
diff --git a/lib/mentat/datatype/sqldb.py b/lib/mentat/datatype/sqldb.py
index 40f9083b1f43f9a4c43dbfb7fd9127108a4a1037..6735983e2ca74fa882da8ab66b9c32ecd03dc3fc 100644
--- a/lib/mentat/datatype/sqldb.py
+++ b/lib/mentat/datatype/sqldb.py
@@ -188,9 +188,9 @@ class UserModel(MODEL):
     """
     __tablename__ = 'users'
 
-    login        = sqlalchemy.Column(sqlalchemy.String(50), unique = True, index = True)
+    login        = sqlalchemy.Column(sqlalchemy.String(50), sqlalchemy.CheckConstraint('login = lower(login)', name='login_lowercase'), unique = True, index = True)
     fullname     = sqlalchemy.Column(sqlalchemy.String(100), nullable = False)
-    email        = sqlalchemy.Column(sqlalchemy.String(250), nullable = False)
+    email        = sqlalchemy.Column(sqlalchemy.String(250), sqlalchemy.CheckConstraint('email = lower(email)', name='email_lowercase'), nullable = False)
     organization = sqlalchemy.Column(sqlalchemy.String(250), nullable = False)
     roles        = sqlalchemy.Column(sqlalchemy.dialects.postgresql.ARRAY(sqlalchemy.String(20), dimensions = 1), nullable = False, default = [])
     password     = sqlalchemy.Column(sqlalchemy.String)