在使用Firebird的每个c接口代码程序中,我传递用户凭据以连接到数据库。如果我没有传递这些凭据并直接调用isc_attach_database()
连接到数据库,则抛出错误:您的用户名和密码未定义。请您的数据库管理员设置Firebird登录。
有没有办法跳过这些或将这些东西作为默认值。我的意思是我想连接到每个程序的数据库而不传递uname
和password
。
以下是我用来连接数据库的示例代码。
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);
}
答案 0 :(得分:1)
您可以设置环境变量ISC_USER
和ISC_PASSWORD
以连接到Firebird数据库,而无需在应用程序中指定用户名和密码。见Setting The ISC_USER And ISC_PASSWORD Environment Variables。请注意,链接文档仅涉及SYSDBA
帐户,但适用于任何帐户。
Firebird Book,Helen Borrie的第2版说:
可以在服务器上设置两个环境变量
ISC_USER
和ISC_PASSWORD
,以避免在本地使用数据库时登录。您将能够执行允许指定用户执行的所有操作,而无需每次都提供凭据。
该文本提到“在服务器上”,但它实际上是客户端应用程序的本地。
Interbase 6.0操作指南(可从Firebird website获得)说:
如果在连接到数据库时或何时未提供用户名和密码 您运行 gbak , gstat 和 gfix 等实用程序,InterBase会查看
ISC_USER
和ISC_PASSWORD
设置环境变量,并将该用户和密码用作InterBase用户。虽然设置这些环境变量很方便,但实际上并非如此 如果安全性完全成问题,建议使用。