Может быть, я слишком поздно отвечаю на этот вопрос, но я столкнулся с этой проблемой пару дней назад и не смог найти какого-либо надежного решения в Интернете. Я нашел решение, поэтому делюсь им.
// Действия по аутентификации базы данных sqlite
скачать zl-файл объединения sqlite3
распакуйте файл. Файл должен содержать shell.c, sqlite3.c, sqlite3.h, sqlite3ext.h
нажмите найти ссылку здесь
3a. Откройте файл userauth.c, скопируйте весь код и вставьте его в конец файла sqlite3.c.
3b. Откройте файл sqlite3userauth.h, скопируйте весь код и поместите его в конец файла sqlite3.h.
- создать выходной файл для выполнения команды в оболочке
команда:
gcc -o sqlite3Exe shell.c sqlite3.c -DSQLITE_USER_AUTHENTICATION -ldl -lpthread
* * 4a тысячи двадцать восемь. Вы получите сообщение об ошибке такого файла "sqlite3userauth.h" в вашем файле shell.c:
Решение: перейдите к этому файлу и закомментируйте эту строку (это потому, что вы уже включили необходимый код, когда копировали sqlite3auth.h в sqlite3.h)
4b. Проверьте выходной файл, выполнив ./sqlite3Exe
(это имя, которое вы дали выходному файлу, созданному на предыдущем шаге). Вы получите консоль sqlite.
* 1 033 * 4c. Создайте базу данных и на флаге аутентификации:
команда1: .open dbname.db
команда2: .auth on
command3: .exit
// команда 3 является необязательной
- Здание библиотеки
5а: создание объектного файла
// Компиляция sqlite3.c для создания объекта после добавления нашего нового кода
команда: gcc -o sqlite3.o -c sqlite3.c -DSQLITE_USER_AUTHENTICATION
С помощью этой команды мы генерируем объектный файл, который мы можем использовать для компиляции нашего файла c.
Создание файла c для аутентификации вашей базы данных:
//authUser.c</p>
<h1>include "stdio.h"</h1>
<h1>include "stdlib.h"</h1>
<h1>include "sqlite3.h"</h1>
<p>int main(int argc,char * argv[]){
int a = 10;
int rtn, rtn2;
sqlite3 *db;
char *sql, *zErMsg;
rtn = sqlite3_open("dbname.db", &db);
rtn = sqlite3_user_add(db,"username","password",2, 1);//last but one param is for number of bytes for password, last param is for weather the user is admin or not
if(rtn){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return(0);
}else{
fprintf(stderr, "Protected database successfully\n");
}
sqlite3_close(db);
return 0;
}
`
Компиляция программы
// Компиляция программы
команда1: gcc authUser.c sqlite3.o -lpthread -ldl
команда2: ./a.out
// Вывод: защищенная база данных успешно
создать файл c для создания таблицы, если пользователь аутентифицирован
//createTable.c</p>
<h1>include "stdio.h"</h1>
<h1>include "stdlib.h"</h1>
<h1>include "sqlite3.h"</h1>
<p>static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i less then argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc,char * argv[]){
int a = 10;
int rtn, rtn2;
sqlite3 *db;
char *sql, *zErMsg;
rtn = sqlite3_open("dbname.db", &db);
rtn = sqlite3_user_authenticate(db, "user","password",2);
if(rtn){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return(0);
}else{
fprintf(stderr, "Opened database successfully\n");
}
sql = "create table newtable(id int not null primary key, name varchar(100) not null)";
//sql = "insert into newtable values(5, 'ishwar')";
rtn = sqlite3_exec(db, sql, callback, 0, &zErMsg);
if(rtn != SQLITE_OK){
sqlite3_free(zErMsg);
}else{
fprintf(stdout, "Table created successfully \n");
//fprintf(stdout, "inserted successfully \n");
}
sqlite3_close(db);
return 0;
}
`
компиляция программы
// Компиляция программы
команда1: gcc createTable.c sqlite3.o -lpthread -ldl
command2: ./a.out
// Вывод: таблица успешно создана
- Создать файл c для добавления значений в таблицу
из предыдущего кода, вы можете видеть две переменные sql и два fprintf внутри остальных, теперь раскомментируйте закомментированную строку и закомментируйте другую. и выполнить ту же команду, что и выше
вывод: успешно вставлено
И все готово, попробуйте поэкспериментировать с кодом, измените значения функции sqlite3_user_authenticate, которую вы не сможете выполнять этими операциями, на максимуме вы сможете открыть базу данных (когда вы комментируете sqlite3_user_authenticate functon.nothing иначе)
- Тестирование с помощью оболочки
Запустите команду: ./sqlite3Exe
(выходной файл, который мы создали на шаге 4)
команда1: .open dbname.db
command2: .tables
// вы должны получить ошибку, user_auth
Спасибо (пожалуйста, не стесняйтесь, напишите мне в случае возникновения проблем: ishwar.rimal@gmail.com)