I'm trying to build a sqlite database with user authentication enabled. Following instruction from https://www.sqlite.org/src/doc/trunk/ext/userauth/user-auth.txt, attemps to read or write will fail if sqlite_user_authenticate returns error. However the program continued to create table and insert values to the database. Does anyone know the problem? Appreciated! How I implemented user_authentication: I appended sqlite3userauth.h to the end of sqlite3.h and userauth.c to the end of sqlite3.c and compiled with gcc -DSQLITE_USER_AUTHENTICATION -c sqlite3.c -lpthread -ldl -o sqlite3.o ar rcs libsqlite3.a sqlite3.o so in my c++ project I link the libsqlite3.a as a lib. Below is my test code: int sqlite_user() { sqlite3 *db; const char* dir = "sqluser.db"; int rc=0; rc = sqlite3_open_v2(dir, &db,SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL); if(rc) fprintf(stderr, "Error Open Database %s\n", sqlite3_errmsg(db)); else fprintf(stdout, "Database opended\n"); const char* usrName = "zzw"; const char* pw = "1111"; rc = sqlite3_user_add(db, usrName, pw, 4, 1); if(rc!=SQLITE_OK) fprintf(stderr, "Error Create User %s\n", sqlite3_errmsg(db)); else fprintf(stdout,"add user done\n"); rc = sqlite3_user_authenticate(db, usrName, "1112", 4); if(rc!=SQLITE_OK) fprintf(stderr, "Error authenticate %s\n", sqlite3_errmsg(db)); else fprintf(stdout, "user authorized\n"); const char* tbName = "TESTTABLE("\ "ID TEXT PRIMARY KEY NOT NULL,"\ "CONTENT TEXT NOT NULL);"; string tablePrefix = "CREATE TABLE IF NOT EXISTS \t"; ostringstream str1; str1<<tablePrefix<<tbName ; string sql = str1.str(); int rc =0; rc = sqlite3_open(dir, &db); if(rc) fprintf(stderr,"Error Open Database %s\n", sqlite3_errmsg(db)); char* msgErr; rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &msgErr); if(rc!=SQLITE_OK) { fprintf(stderr,"Error Create Table %s\n", sqlite3_errmsg(db)); sqlite3_free(msgErr); } else fprintf(stderr, "Table created successfully \n"); char* sql; sql = "INSERT INTO TESTTABLE (ID, CONTENT)"\ "VALUES('X1', 'SSS1');"; char *errMsg=0; rc = sqlite3_exec(db, sql, 0,0,&errMsg); if(rc!=SQLITE_OK) fprintf(stderr, "error insert %s\n", sqlite3_errmsg(db)); else fprintf(stdout, "insert done\n"); sqlite3_close(db); return 0; }