C Firebird数据库连接凭据
在Firebird的每个c接口代码程序中,我都会传递用户凭据以连接到数据库。如果我不传递这些凭据并直接调用C Firebird数据库连接凭据,c,xcode,firebird,firebird2.5,C,Xcode,Firebird,Firebird2.5,在Firebird的每个c接口代码程序中,我都会传递用户凭据以连接到数据库。如果我不传递这些凭据并直接调用isc\u attach\u database()连接到数据库,则抛出错误:未定义您的用户名和密码。请您的数据库管理员设置Firebird登录。 有没有办法跳过这些或将这些设置为默认设置。我的意思是我想连接到每个程序的数据库,而不需要传递uname和密码 下面是我用来连接数据库的示例代码 int main() { isc_db_handle db1 = NULL; // Databa
isc\u attach\u database()
连接到数据库,则抛出错误:未定义您的用户名和密码。请您的数据库管理员设置Firebird登录。
有没有办法跳过这些或将这些设置为默认设置。我的意思是我想连接到每个程序的数据库,而不需要传递uname
和密码
下面是我用来连接数据库的示例代码
int main()
{
isc_db_handle db1 = NULL; // Database handle.
isc_tr_handle trans = NULL;//transaction handle
// Allocate some pointers to a dpb (database parameter buffer).
// You use the dpb to talk with the database.
char dpb_buffer[256], *dpb, *p;
short dpb_length;
char *uname; // user-name.
char *upass; // password.
ISC_STATUS status_vector[20]; // Status vector, to monitor connection.
char *str = "/Users/Sumanth/Desktop/NewDB2.fdb";
uname = "SYSDBA";
upass = "masterkey";
dpb = dpb_buffer;
// Specify the version of the parameter buffer, always the
// compile-time constant isc_dpb_version1.
*dpb++ = isc_dpb_version1;
// # of cache buffers to allocate for use with the database,
// default = // 75. In the API guide I think isc_dpb_num_buffers is
//specified as // isc_num_buffers, but that I could not get to work.
*dpb++ = isc_dpb_num_buffers;
*dpb++ = 1;
*dpb++ = 90;
*dpb++ = isc_dpb_user_name; // Save user-name in dpb.
*dpb++ = strlen(uname);
for (p = uname; *p;)
*dpb++ = *p++;
*dpb++ = isc_dpb_password; // Save password in dpb.
*dpb++ = strlen(upass);
for (p = upass; *p;)
*dpb++ = *p++;
dpb_length = dpb - dpb_buffer;
// Attach to the database.
isc_attach_database(status_vector, strlen(str), str, &db1,dpb_length, dpb_buffer);
}
您可以将环境变量ISC_USER
和ISC_PASSWORD
设置为连接到Firebird数据库,而无需在应用程序中指定用户名和密码。看见请注意,链接文档只讨论了SYSDBA
帐户,但它适用于任何帐户
海伦·博里的《火鸟》第二版说:
可以在服务器上设置两个环境变量ISC_USER
和ISC_PASSWORD
,以避免在本地使用数据库时需要登录。您将能够执行指定用户允许执行的所有操作,而无需每次提供凭据
文本提到“在服务器上”,但实际上它是客户端应用程序的本地
Interbase 6.0操作指南(可从中获得)指出:
如果在连接到数据库或
运行gbak、gstat和gfix等实用程序时,InterBase会查看是否设置了ISC_用户
和ISC_密码
环境变量,并将该用户和密码用作InterBase用户
虽然设置这些环境变量很方便,但显然不方便
如果存在安全问题,则建议使用
我已经试过了。我在终端中设置了这些凭据。但是,当我执行代码时,它仍然要求提供连接到服务器的凭据database@user3723478您确定您的执行环境与您的终端共享这些环境变量吗?奇怪。我通常不使用C API,但我查看了firebird源代码,在那里,用户名和密码被添加到附加方法中的dpb中。如果dpb中没有提供。我会看看我是否可以复制这个(可能需要几天)。