1. About this guide
The Firebird Quick Start Guide is an introduction for the complete newcomer to a few essentials for getting off to a quick start with a Firebird binary kit. The guide first saw the light as Chapter 1 of the Using Firebird manual, sold on CD by IBPhoenix. Later it was published separately on the Internet. In June 2004, IBPhoenix donated it to the Firebird Project. Since then, it is maintained, and regularly updated, by members of the Firebird documentation project.
Before you read on, verify that this guide matches your Firebird version. This document covers Firebird 3. For all other Firebird versions, get the corresponding Quick Start Guide at https://www.firebirdsql.org/en/documentation/. |
2. The Firebird licenses
Firebird is a free, open-source database management system, but “free” does not mean that everything is permitted. The use of Firebird is governed by two licenses: the IPL (InterBase Public License) and the IDPL (Initial Developer’s Public License). The first one covers the parts of the source code that were inherited from InterBase; the second applies to the additions and improvements made by the Firebird Project. Both licenses offer similar rights and restrictions. In short:
-
Use of the software is free, even for commercial purposes. You may also redistribute the software, separately or with a product of your own, but you may not claim ownership or credit for it. Any license notices included with Firebird must remain intact.
-
You may modify and recompile the Firebird source code or parts of it. You may distribute such modified versions, but if you do so, you must document your modifications and make them publicly available, at no cost, under the same license as the original code.
-
You may include Firebird source code (modified or not) in a larger work and distribute that larger work, in source and/or compiled form, under a license of your own choosing. You need not publicize the source code for the entire larger work, but you must fulfill the license conditions for the parts that were taken from Firebird, whether they were modified or not.
Please notice that the above is a simplified overview. Only the original license texts are legally binding. You can find them here:
3. Installing Firebird
The instructions given below for the installation of Firebird on Windows and Linux should be sufficient for the vast majority of cases. However, if you experience problems or if you have special needs not covered here, be sure to read the Release Notes. This is especially important if you are upgrading from a previous version or if there are remnants of an old (and maybe long gone) InterBase or Firebird installation floating around your system (DLLs, Registry entries, environment variables…)
3.1. Installation kits
At the Firebird website, https://firebirdsql.org, the installation kits have names like:
Firebird-3.0.0.bbbbb_p_x64.exe
|
Windows executable installer |
Firebird-3.0.0.bbbbb-p_x64.zip
|
Windows zip kit for manual installation |
Firebird-3.0.0.bbbbb_p_Win32.exe
|
Windows executable installer, 32 bits |
Firebird-3.0.0.bbbbb-p.amd64.rpm
|
Linux RPM kit |
Firebird-3.0.0.bbbbb-p.amd64.tar.gz
|
Linux compressed tarball |
Firebird-3.0.0.bbbbb-p.i686.rpm
|
Linux RPM kit, 32 bits |
Firebird-3.0.0.bbbbb-x86_64.pkg
|
Mac OS-X 64-bit package |
...where bbbbb
is the build number (32483 for the initial 3.0.0 release) and p
the packaging number (usually 0 or another low one-digit number).
Firebird 3 packages will also undoubtedly wind up in various Linux distributions and their online repositories. These will have their own naming schemes.
3.2. Installing the Firebird server
3.2.1. Before installation
It is almost always advisable to uninstall any previous Firebird installations completely (after you’ve read the next paragraph!) and also hunt the Windows system dirs for old copies of gds32.dll
and fbclient.dll
.
If you’re using Linux, the uninstall scripts should have removed any copies and/or symlinks in /usr/lib[64]
, but it won’t hurt to look if anything named libfbclient.
or libgds.
is still lying around.
Furthermore, you should be aware that Firebird 3 won’t open databases that were created by older versions. So before taking down your existing setup, you should back up all your databases in order that you can restore them later under Firebird 3.
You may also want to back up your old security database security2.fdb
.
Firebird 3 comes with an SQL script security_database.sql
(located in misc/upgrade/security
) that will upgrade the old security database to Firebird 3, preserving all information except SYSDBA
's and except any passwords.
For more information, see Compatibility Issues :: Upgrading a v.2.x Security Database in the Firebird 3 Release Notes.
3.2.2. Installation drives
The Firebird server — and any databases you create or connect to — must reside on a hard drive that is physically connected to the host machine. You cannot locate components of the server, or any database, on a mapped drive, a filesystem share or a network filesystem. (Well, you can, but you shouldn’t, and this technique isn’t covered here.)
You can mount a read-only database on a CD-ROM drive, but you cannot run Firebird server from one. |
3.2.3. Installation script or program
Although it is possible to install Firebird by a filesystem copying method — such as untarring a snapshot build or decompressing a structured .zip
archive — it is strongly recommended that you use the distributed release kit (.exe
for Windows, .rpm
for Linux), especially if this is the first time you install Firebird.
The Windows installation executable, the Linux rpm
program and the install.sh
script in the official .tar.gz
for various Posix platforms all perform some essential setup tasks.
Provided you follow the installation instructions correctly, there should be nothing for you to do upon completion but log in and go!
3.2.4. Server modes
Some installers ask you to choose between Classic, SuperClassic and Superserver mode. What are they?
-
Classic mode (aka MultiProcess) involves a single listening process that spawns off an additional process for each client connection. Using a locking mechanism, it allows shared connections to database files.
-
SuperClassic (ThreadedShared) is a single server process. Client connections are handled by separate threads, each having their own database page cache. Other processes (e.g. embedded servers) may open the same database simultaneously (hence the Shared).
-
Superserver (ThreadedDedicated) is also a single server process with threads handling client connections. There is a single, common database page cache. The server requires exclusive access to each database file it opens (hence the Dedicated).
Each mode is fully stable and there is no reason to categorically prefer one to the other.
Of course, you may have your own specific considerations.
When in doubt, just follow the installer default for now.
Changing the server mode later can be done via the configuration file firebird.conf
and requires a restart but not reinstallation.
Users of Firebird 2.5 or earlier: please notice that as from Firebird 3, Superserver fully supports the use of multiple processors/cores out of the box, so lack of SMP support is no longer a reason to avoid it. |
3.2.5. Installing on Windows
Make sure you run the installer program as Administrator (i.e. right-click on the executable and choose “Run as Administrator”) or you may run into permission problems later!
On Windows server platforms Firebird will run as a system service by default, but during installation you can also choose to let it run as an application. Don’t do this unless you have a compelling reason.
The installer will also ask if you want to enable authorization for legacy (i.e. pre-3.0) Firebird clients. If security is a concern (as it should be), don’t allow this or allow it only temporarily while you upgrade your existing clients to Firebird 3.0. The legacy connection method sends passwords over the wire unencrypted; it also limits the usable length of the password to 8 characters.
During installation you have the option of providing a password for Firebird’s superuser, SYSDBA
.
Firebird passwords may be up to 255 bytes long, but due to the nature of the hashing algorithm the “effective length” is around 20 bytes, so it’s not very useful to enter a password that’s much longer than that.
Notice however that if you do enter such a password, you must supply it in its full length every time you connect — it won’t work if you truncate it to the first 20 characters!
Use the Guardian?
The Firebird Guardian is a utility that monitors the server process and tries to restart it if it terminates abnormally. During a Windows install, you can opt to use the Guardian when running in SuperClassic or Superserver mode. However, since modern Windows systems have the facility to watch and restart services, there is no reason to use the Guardian if Firebird runs as a service (which it should).
The Guardian may be phased out in future versions of Firebird.
3.2.6. Installing on Linux and other Unix-like platforms
In all cases, read the Release Notes for the Firebird version you’re going to install. There may be significant variations from release to release of any Posix operating system, especially the open source ones. Where possible, the build engineers for each Firebird version have attempted to document any known issues.
Aside from being packaged with the download kits, Release Notes for all officially released versions of Firebird can also be found at https://www.firebirdsql.org/en/release-notes/.
If you have a Linux distribution that supports rpm
installs, consult the appropriate platform documentation for instructions about using RPM Package Manager.
In most distributions you will have the choice of performing the install from a command shell or through a GUI interface.
For Linux distributions that cannot process rpm
programs, and for Unix flavours for which no .rpm
kit is provided, use the .tar.gz
kit.
Quite often, installation is just a matter of untarring the archive and running install.sh
.
In some cases, the Release Notes or packed Readmes may instruct you to edit the scripts and make some manual adjustments.
3.3. Installing multiple servers
Firebird allows the operation of multiple servers on a single machine.
It can also run concurrently with Firebird 1.x or InterBase servers.
Setting this up is not a beginner’s task though.
If you need to run multiple servers on the same machine, the second and subsequent servers must be installed and configured manually.
They need to have different service names and should listen on different TCP/IP ports.
The file install_windows_manually.txt
in the doc
subdir may be of help if you’re doing this on Windows, but bear in mind that it was written for Firebird 2.1.
Also read the chapter Configuring the Port Service on Client and Server in the Firebird 1.5 (!) Release Notes:
3.4. Testing your installation
If you want to connect to your Firebird server across a network, then before testing the Firebird server itself you may want to verify that the server machine is reachable from the client at all. At this point, it is assumed that you will use the recommended TCP/IP network protocol for your Firebird client/server connections. (On Windows networks, NetBEUI is also supported.)
3.4.1. Pinging the server
The ping
command — available on most systems — is a quick and easy way to see if you can connect to a server machine via the network.
For example, if your server’s IP address in the domain that is visible to your client is 192.13.14.1
, go to a command shell on the client machine and type the command
ping 192.13.14.1
substituting this example IP address with the IP address that your server is broadcasting. If you are on a managed network and you don’t know the server’s IP address, ask your system administrator. Of course, you can also ping the server by its name, if you know it:
ping vercingetorix
If you are connecting to the server from a local client — that is, a client running on the same machine as the server — you can ping the virtual TCP/IP loopback server:
ping localhost
or
ping 127.0.0.1
If you have a simple network of two machines linked by a crossover cable, you can set up your server with any IP address you like except 127.0.0.1 (which is reserved for a local loopback server) and, of course, the IP address which you are using for your client machine. If you know the “native” IP addresses of your network cards, and they are different, you can simply use those.
Once you have verified that the server machine is reachable from the client, you can go on to the next step.
3.4.2. Making sure that the Firebird server is running
Most — but not all — installation packages start up the Firebird server as one of the final steps during installation, and also make sure that Firebird is started at every reboot.
After being launched, the Firebird server should be running:
- On Linux or other Unix-like systems
-
As a service.
- On Windows server systems
-
As a service or as an application. Service is default and highly recommended.
The following sections show you how to test the server on each platform.
Server check: Linux and other Unices
Use the top
command in a command shell to inspect the running processes interactively.
If a Firebird 3 server is running, you should see a process named firebird
and possibly also fbguard
(the Guardian process).
The following screen shows the output of top
, restricted by grep
to show only lines containing the string firebird
:
paul@fili ~ $ top -b -n1 | grep [f]irebird 7169 firebird 20 0 29668 992 560 S 0,0 0,0 0:00.00 fbguard 7171 firebird 20 0 228160 5876 3048 S 0,0 0,1 0:00.01 firebird
As an alternative to top
, you can use ps -ax
or ps -aux
and pipe the output to grep
.
The process name is firebird
regardless if Firebird is running in Superserver, Classic or SuperClassic mode.
However, it is possible to configure a Classic-mode Firebird in such a way that it runs as a service under (x)inetd.
In that case, you will only see a firebird
process if a client connection has been made.
Another way of testing the server after installation is by starting a Firebird client (e.g. /opt/firebird/bin/isql
) and connecting to a database or creating one.
These operations are described later in this guide.
If it turns out that the server hasn’t been started after all, you may need to do this manually, e.g.
with /etc/init.d/firebird start
or systemctl start firebird
and systemctl enable firebird
, depending on the type of Linux system and your Firebird installation package.
Server check: Windows, running as service
Open
.This illustration shows the Services applet display on Windows 7. The appearance may vary from one Windows server edition to another.
You should at least find the Firebird server in the services listing. The Guardian may or may not be running, depending on the choices you made during installation. If you didn’t opt to start the server at the end of the installation process, you may do so now by right-clicking on the Firebird entry (or the Guardian) and choosing Start.
Server check: Windows, running as application
If Firebird is up and running as an application, it is represented by an icon in the system tray:
-
A green and grey server symbol if controlled by the Guardian;
-
A round yellow and black graphic if running standalone.
A flashing icon indicates that the server is in the process of starting up (or at least trying to do so). A red icon, or an icon with an overlying red stop sign, indicates that startup has failed.
One way to make 100% sure if the server is running or not is to press Ctrl+Alt+Del and look for the firebird
process (and possibly fbguard
) in the task list.
You may need to check the box “Show processes of all users” for these processes to become visible.
On some occasions, you may need to start the Guardian or server once explicitly via the Start menu even if you opted for “Start Firebird now” at the end of the installation process. Sometimes a reboot is necessary.
You can shut the server down via the menu that appears if you right-click on the tray icon. Notice that this also makes the icon disappear; you can restart Firebird via the Start menu.
In Classic mode (but not SuperClassic!) a new process is launched for every connection, so the number of |
3.5. Performing a client-only install
Each remote client machine needs to have the client library — libfbclient.so
on Posix clients, fbclient.dll
on Windows clients — that matches the release version of the Firebird server.
Firebird can install symlinks or copies named after the 1.0 libs (with the “old” InterBase names), to maintain compatibility with third-party products which need these files.
Some extra pieces are also needed for the client-only install.
3.5.1. Windows
At present, no separate installation program is available to install only the client pieces on a Windows machine. If you are in the common situation of running Windows clients to a Linux or other Unix-like Firebird server (or another Windows machine), you need to download the full Windows installation kit that corresponds to the version of Firebird server you install on your server machine.
Fortunately, once you have the kit, the Windows client-only install is a breeze. Just run the installation program and when you arrive at the “Select Components” screen, choose one of the client-only options from the drop-down list or uncheck the “Server Components” checkbox.
3.5.2. Linux and some other Posix clients
A small-footprint client install program for Linux clients is not available either. Additionally, some Posix flavours — even within the Linux constellation — have somewhat idiosyncratic requirements for filesystem locations. For these reasons, not all *x distributions for Firebird even contain a client-only install option.
For most Linux flavours, the following procedure is suggested for a manual Firebird client-only install.
Log in as root
for this.
-
Look for
libfbclient.so.3.0.n
(n
being the patch version number) in/opt/firebird/lib
on the machine where the Firebird server is installed. Copy it to/usr/lib
on the client (or/usr/lib64
if both server and client are 64-bits). -
Create chained symlinks using the following commands:
ln -s /usr/lib/libfbclient.so.3.0.n /usr/lib/libfbclient.so.2 ln -s /usr/lib/libfbclient.so.2 /usr/lib/libfbclient.so
...replacing
3.0.n
with your version number, e.g.3.0.0
or3.0.4
If you’re running applications that expect the legacy libraries to be present, also create the following symlinks:
ln -s /usr/lib/libfbclient.so /usr/lib/libgds.so.0 ln -s /usr/lib/libfbclient.so /usr/lib/libgds.so
-
Copy
firebird.msg
to the client machine, preferably into the/opt/firebird
directory. If you place it somewhere else, create a system-wide permanentFIREBIRD
environment variable pointing to the right directory, so that the API routines can locate the messages. -
Optionally copy some of the Firebird command-line tools — e.g.
isql
— to the client machine.
Instead of copying the files from a server, you can also pull them out of a Firebird tar.gz
kit.
Everything you need is located in the /opt/firebird
tree within the buildroot.tar.gz
archive that’s packed inside the kit.
4. Default disk locations
The tables below show you where you’ll find the Firebird files and directories after a standard installation. Please notice that the listings are not exhaustive.
4.1. Linux
The following table shows the default component locations of a Firebird installation on Linux. Some of the locations may be different on other Unix-like systems, or on certain Linux distributions.
Component | File Name | Default Location |
---|---|---|
Installation directory (referred to hereafter as |
- |
|
Configuration files |
|
|
Release Notes and other documentation |
Various files |
|
Firebird server |
|
|
Command-line tools |
|
|
Plugins (new in Firebird 3) |
|
|
Sample database |
|
|
UDF libraries |
|
|
Additional server-side libraries |
|
|
Client libraries |
The usual symlinks ( |
(actually, the real stuff is in |
4.2. Windows
In the table below, <ProgramDir>
refers to the Windows programs folder.
This is usually “C:\Program Files
” but may also be a different path, e.g. “D:\Programmi
”.
Likewise, <SystemDir>
refers to the Windows system directory.
Be sure to read the notes below the table, especially if you’re running Firebird on a 64-bit Windows system.
Component | File Name | Default Location |
---|---|---|
Installation directory (referred to hereafter as |
- |
|
Configuration files |
|
|
Release Notes and other documentation |
Various files |
|
Firebird server |
|
|
Command-line tools |
|
|
Plugins (new in Firebird 3) |
|
|
Sample database |
|
|
Internationalisation |
|
|
User-defined function (UDF) libraries |
|
|
Additional server-side libraries |
|
|
Client connection libraries |
|
|
Some necessary Microsoft runtime libs |
|
|
32-bit library versions for use with 64-bit Firebird |
|
|
The Windows system directory
A typical location for the Windows system directory — on both 32-bit and 64-bit systems — is If you run Firebird on a 64-bit system, make sure to also read the next note. |
Important notice for 64-bit Windows users
On 64-bit Windows systems, the “ In the same vein, the If you’re not aware of this, you may have a hard time locating your 32-bit Firebird components on a 64-bit Windows system. (Incidentally, WOW stands for Windows on Windows. Now you can work out for yourself what LOL means.) |
5. Server configuration and management
There are several things you should be aware of — and take care of — before you start using your freshly installed Firebird server. This part of the manual introduces you to some useful tools and shows you how to protect your server and databases.
5.1. User management
In Firebird 3, user management is done entirely through SQL commands.
Users of previous versions are probably familiar with the gsec
utility for this task.
It is still present, but deprecated and it won’t be discussed here.
5.1.1. Changing the SYSDBA
password
One Firebird account is created automatically as part of the installation process: SYSDBA
.
This account has all the privileges on the server and cannot be deleted.
Depending on version, OS, and architecture, the installation program will either
-
install the
SYSDBA
user with the passwordmasterkey
, or -
ask you to enter a password during installation, or
-
generate a random password and store that in the file
SYSDBA.password
within your Firebird installation directory.
If the password is masterkey
and your server is exposed to the Internet at all — or even to a local network, unless you trust every user with the SYSDBA
password — you should change it immediately.
Fire up isql
or another Firebird client and connect to a database.
In this example, the “employee” example database is used, because its alias is always present in a freshly installed Firebird setup:
connect localhost:employee user sysdba password masterkey;
If you do this in isql
, it should respond with:
Database: localhost:employee, User: SYSDBA
Now alter the sysdba password:
alter user sysdba set password 'Zis4_viZuna83YoYo';
The SET
keyword is optional, and instead of USER SYSDBA
you can also use CURRENT USER
, which always refers to the user you are logged in as.
If the command succeeds, you won’t get any feedback.
Instead, isql
will just print the next “SQL>
”-prompt, thus indicating that all is well and your further input is awaited.
Please notice that unlike “regular” user names, Firebird passwords are always case sensitive.
5.1.2. Adding Firebird user accounts
Firebird allows the creation of many different user accounts. Each of them can own databases and also have various types of access to databases and database objects it doesn’t own.
Assuming you are connected to a database as SYSDBA
, you can add a user account as follows:
create user billyboy password 'TooLongFor8099Comfort';
The full range of user management commands is:
CREATE USER name PASSWORD 'password' [<options>] [<tags>]; [CREATE OR] ALTER USER name [SET] [PASSWORD 'password'] [<options>] [<tags>]; ALTER CURRENT USER [SET] [PASSWORD 'password'] [<options>] [<tags>]; DROP USER name; <options> ::= <option> [, <option> ...] <option> ::= {FIRSTNAME | MIDDLENAME | LASTNAME} 'stringvalue' | ACTIVE | INACTIVE <tags> ::= TAGS (<tag> [, <tag> ...]) <tag> ::= tagname = 'stringvalue' | DROP tagname
Tags are optional key-value pairs that can be freely defined by the user.
The key (tag name) must be a valid SQL identifier, the value a non-NULL
string of at most 255 bytes.
Only SYSDBA
and co-admins can use all these commands.
Ordinary users can change their own parameters (such as password, name parts and tags, but not active/inactive) using ALTER USER name
or ALTER CURRENT USER
.
It is not possible to change an account name.
Examples:
create user dubya password 'Xwha007_noma'
firstname 'GW' lastname 'Shrubbery';
create user lorna password 'Mayday_domaka'
tags (Street = 'Main Street', Number = '888');
alter user benny tags (shoesize = '8', hair = 'blond', drop weight);
alter current user set password 'SomethingEvenMoreSecretThanThis';
alter user dubya set inactive;
drop user ted;
5.1.3. The security database
Firebird user accounts are kept in a security database, which normally resides in the installation directory and is called security3.fdb
(alias: security.db
).
Except in the case of so-called embedded connections (more about those later in this guide), connecting to a database always involves the security database, against which the user credentials are verified.
Of course this is done transparently;
the user doesn’t have to make an explicit connection to the security database.
However, in Firebird 3 this is not the end of the story. Firebird now allows the use of multiple security databases on a system, each security database governing a specific set of databases. A database can even act as its own security database.
Showing how to set this up is outside the scope of this Quick Start Guide.
You can find full details in the Release Notes, chapter Security.
But it is important to realise that if a system has multiple security databases, managing user accounts while connected to a database will always affect the accounts in the security database that governs that specific database.
To be on the safe side, you may want to connect to the security database itself before issuing your user management commands.
Connecting to the security database used to be forbidden in recent versions of Firebird, but is now once again possible, albeit by default only locally (which means that even the localhost
route is blocked).
5.1.4. Appointing co-administrators
Note: What follows here is not essential knowledge for beginners. You can skip it if you like and go on to the Security section.
In Firebird 2.5 and up, SYSDBA
(and others with administrator rights) can appoint co-administrators.
This is done with the GRANT ADMIN ROLE
directive:
create user bigbill password 'bigsekrit7foryou' grant admin role;
alter user littlejohn grant admin role;
The first command creates user bigbill
as a Firebird administrator, who can add, alter and drop users.
The second command grants administrator privileges to the existing user littlejohn
.
To revoke administrator privileges from an account, use ALTER USER … REVOKE ADMIN ROLE
.
Notes
|
Differences between co-administrators and SYSDBA
-
Co-admins can create, alter and drop users, but they have no automatic privileges in regular databases, like
SYSDBA
has. -
Unlike
SYSDBA
, co-admins must specify theRDB$ADMIN
role explicitly if they want to exert their rights as system administrator:connect security.db user bigbill password bigsekrit7foryou role rdb$admin
For reasons explained elsewhere in this guide, connecting to the security database like this may fail if a Superserver is running. On Windows, you may circumvent this by prepending
xnet://
to the database path or alias, but on Posix, you’re stuck. The only solution there is to grant the co-admin theRDB$ADMIN
role in at least one regular database as well. (A database that uses the security database in question, of course.) This is done in the usual way that roles are granted:grant rdb$admin to bigbill
Grantors can be the database owner,
SYSDBA
, and every other user who has theRDB$ADMIN
role in that database and has specified it while connecting. EveryRDB$ADMIN
member in a database can pass the role on to others, so again there is noWITH ADMIN OPTION
. Once the co-admin has obtained the role, he can connect to the (regular) database with it and use the SQL user management commands. It’s not the most elegant of solutions, but it works.Please remember:The
RDB$ADMIN
role in a database gives the granteeSYSDBA
rights in that database only!-
If it is the security database, the grantee can manage user accounts, but has no special privileges in other databases.
-
If it is a regular database, the grantee can control that database like he was
SYSDBA
, but again has no special privileges in other databases, and has no user administration privileges.
Of course it is possible to grant a user the
RDB$ADMIN
role in several databases, including the security database. -
5.2. Security
Firebird 3 offers a number of security options, designed to make unauthorised access as difficult as possible. Be warned however that some configurable security features default to the old, “insecure” behaviour inherited from InterBase and earlier Firebird versions, in order not to break existing applications.
It pays to familiarise yourself with Firebird’s security-related configuration parameters. You can significantly enhance your system’s security if you raise the protection level wherever possible. This is not only a matter of setting parameters, by the way: other measures involve tuning filesystem access permissions, an intelligent user accounts policy, etc.
Below are some guidelines for protecting your Firebird server and databases.
- Run Firebird as non-system user
-
On Unix-like systems, Firebird already runs as user
firebird
by default, not asroot
. On Windows server platforms, you can also run the Firebird service under a designated user account (e.g.Firebird
). The default practice — running the service as theLocalSystem
user — poses a security risk if your system is connected to the Internet. ConsultREADME.instsvc.txt
in thedoc
subdir to learn more about this. - Change
SYSDBA
's password -
As discussed before, if your Firebird server is reachable from the network and the system password is
masterkey
, change it. - Don’t create user databases as SYSDBA
-
SYSDBA
is a very powerful account, with full (destructive) access rights to all your Firebird databases. Its password should be known to a few trusted database administrators only. Therefore, you shouldn’t use this super-account to create and populate regular databases. Instead, generate normal user accounts, and provide their account names and passwords to your users as needed. You can do this with the SQL user management commands as shown above, or with any decent third-party Firebird administration tool. - Protect databases on the filesystem level
-
Anybody who has filesystem-level read access to a database file can copy it, install it on a system under his or her own control, and extract all data from it — including possibly sensitive information. Anybody who has filesystem-level write access to a database file can corrupt it or totally destroy it.
Also, anybody with filesystem-level access to a database can make an embedded connection to it posing as any Firebird user (including
SYSDBA
) without having his credentials checked. This can be especially disastrous if it concerns the security database!As a rule, only the Firebird server process should have access to the database files. Users don’t need, and should not have, access to the files — not even read-only. They query databases via the server, and the server makes sure that users only get the allowed type of access (if at all) to any objects within the database.
As a relaxation of this rule, most Firebird configurations allow users to create and use databases in their own filesystem space and make embedded connections to them. Since these are their files and their data, one may argue that unrestricted and possibly destructive access should be their own concern, not yours.
If you don’t want or need this relaxation, follow the instructions in the next item.
- Disable embedded connections
-
If you don’t want any type of direct access, you may disable embedded mode (= direct filesystem-level access) altogether by opening
firebird.conf
and locating theProviders
entry. The default (which is probably commented out) is:#Providers = Remote,Engine12,Loopback
Now, either remove the hash mark and the
Engine12
provider (this is the one that makes the embedded connections), or — better — add an uncommented line:Providers = Remote,Loopback
The
Remote
provider takes care of remote connections; theLoopback
provider is responsible for TCP/IP connections vialocalhost
, as well as (on Windows) WNET/NetBEUI and XNET connections to databases on the local machine. All these connection types require full authentication and have the server process, not the user process, open the database file.Please notice that you can also set the
Providers
parameter on a per-database basis. You can set a default infirebird.conf
as shown above, and then override it for individual databases indatabases.conf
like this:bigbase = C:\Databases\Accounting\Biggus.fdb { Providers = Engine12,Loopback }
The first line defines the alias (see next item), and everything between the curly brackets are parameters for that specific database. You’ll find
databases.conf
in the same directory asfirebird.conf
. Refer to the Release Notes, chapter Configuration Additions and Changes, section Per-database Configuration, for more information about the various parameters. - Use database aliases
-
Database aliases hide physical database locations from the client. Using aliases, a client can e.g. connect to “
frodo:zappa
” without having to know that the real location isfrodo:/var/firebird/music/underground/mothers_of_invention.fdb
. Aliases also allow you to relocate databases while the clients keep using their existing connection strings.Aliases are listed in the file
databases.conf
, in this format on Windows machines:poker = E:\Games\Data\PokerBase.fdb blackjack.fdb = C:\Firebird\Databases\cardgames\blkjk_2.fdb
And on Linux:
books = /home/bookworm/database/books.fdb zappa = /var/firebird/music/underground/mothers_of_invention.fdb
Giving the alias an
.fdb
(or any other) extension is fully optional. Of course if you do include it, you must also specify it when you use the alias to connect to the database.Aliases, once entered and saved, take effect immediately. There is no need to restart the server.
- Restrict database access
-
The
DatabaseAccess
parameter infirebird.conf
can be set toRestrict
to limit access to explicitly listed filesystem trees, or even toNone
to allow access to aliased databases only. Default isFull
, i.e. no restrictions.Note that this is not the same thing as the filesystem-level access protection discussed earlier: when
DatabaseAccess
is anything other thanFull
, the server will refuse to open any databases outside the defined scope even if it has sufficient rights on the database files. - Choose your authentication method(s)
-
Firebird supports three authentication methods when connecting to databases:
-
Srp (Secure Remote Password): The user must identify him/herself with a Firebird username and password, which the server checks against the security database. The maximum effective password length is around 20 bytes, although you may specify longer passwords. Wire encryption is used.
-
Win_Sspi (Windows Security Support Provider Interface): The user is logged in automatically with his Windows account name.
-
Legacy_Auth: Insecure method used in previous Firebird versions. Passwords have a maximum length of 8 bytes and are sent unencrypted across the wire. Avoid this method if possible.
Two configuration parameters control Firebird’s authentication behaviour:
-
AuthServer
determines how a user can connect to the local server. It is usually “Srp
” or, on Windows machines, “Srp, Win_Sspi
”. In the latter case, the user will be authenticated with his Windows login if he fails to supply user credentials (causing theSrp
method, which is tried first, to fail). -
AuthClient
defines how the local client tries to authenticate the user when making a connection. It is usually “Srp, Win_Sspi, Legacy_Auth
”, allowing the user to connect to pre-Firebird-3 servers on remote machines.
If
Win_Sspi
and/orLegacy_Auth
are allowed on the server side, you must also set theWireCrypt
parameter toEnabled
orDisabled
, but notRequired
.Likewise, if a server (not a client!) supports
Legacy_Auth
, theUserManager
parameter must be set toLegacy_UserManager
instead ofSrp
. (The defaultSrp
user manager can still be addressed by addingUSING PLUGIN SRP
to your user management commands.)The
AuthServer
,AuthClient
,WireCrypt
andUserManager
parameters are all set infirebird.conf
en can be overridden per database indatabases.conf
.Please notice: enabling
Win_Sspi
on the server activates the plugin but doesn’t grant Windows accounts any type of access to databases yet. Logging in to, say, theemployee
database without credentials (and making sure no embedded connection is made) will result in this error message:SQL> connect xnet://employee; Statement failed, SQLSTATE = 28000 Missing security context for employee
In other words: “We know who you are (because the
Win_Sspi
plugin identified you) but you can’t come in.”The solution is to create, as
SYSDBA
, a global mapping that gives any Windows account access to databases — but no special privileges — under the same name. This is done with the following command:create global mapping trusted_auth using plugin win_sspi from any user to user
Trusted_auth
is just a chosen name for the mapping. You may use another identifier.From any user
means that the mapping is valid for any user authenticated by theWin_Sspi
plugin.To user
indicates that every user will be made known under his own Windows account name in each database he connects to. If instead we had specifiedto user bob
, then every Windows user authenticated by theWin_Sspi
plugin would bebob
in every database.With the mapping in effect, the “Windows trusted” connection succeeds:
SQL> connect xnet://employee; Database: xnet://employee, User: SOFA\PAUL SQL> select current_user from rdb$database; USER =============================== SOFA\PAUL
With embedded connections, i.e. serverless connections handled by
Engine12
, where the client process directly opens the database file, the user is also logged in under his Windows account name if he doesn’t provide a user name when connecting. However, this doesn’t requireWin_Sspi
to be enabled, nor does it need any explicit mapping:SQL> connect employee; Database: employee, User: PAUL SQL> select current_user from rdb$database; USER =============================== PAUL
-
- Consider whether Windows administrators should have
SYSDBA
rights -
In Firebird 2.1, if the (now defunct) configuration parameter
Authentication
was trusted or mixed, Windows administrators would automatically receiveSYSDBA
privileges in all databases, including the security database. In Firebird 2.5 and later, this is no longer the case. This reduces the risk that administrators with little or no Firebird knowledge mess up databases or user accounts.If you still want to apply the automatic
SYSDBA
mapping as it was in Firebird 2.1, login asSYSDBA
and give the command:create global mapping win_admin_sysdba using plugin win_sspi from predefined_group domain_any_rid_admins to user sysdba
This grants all Windows administrators automatic
SYSDBA
rights in every database (including the security database, so they can manage user accounts), provided that they are authenticated by theWin_Sspi
plugin. To achieve this, they must connect-
without supplying any user credentials, and
-
making sure that the
Engine12
provider doesn’t kick in. This is easily achieved with a connection string likexnet://local-path-or-alias
.
To give just one administrator — or indeed any user — full
SYSDBA
power, use this command:create global mapping frank_sysdba using plugin win_sspi from user "sofa\frank" to user sysdba
The double quotes are necessary because of the backslash in the user name. (Specifying just
frank
will be accepted by Firebird, but won’t result in a working mapping on most, if not all, Windows systems.)You can drop any mapping with the command:
DROP [GLOBAL] MAPPING mapping_name
E.g.:
drop global mapping win_admin_sysdba; drop global mapping frank_sysdba;
The
GLOBAL
keyword is necessary if it concerns a global mapping and you’re not directly connected to the security database where the mapping is registered. -
5.3. Administration tools
The Firebird kit does not come with a GUI admin tool.
It does have a set of command-line tools — executable programs which are located in the bin
subdirectory of your Firebird installation (on Windows, they are in the installation directory itself).
One of them, isql
, has already been introduced to you.
The range of excellent GUI tools available for use with a Windows client machine is too numerous to describe here. At least one of them, FlameRobin, is also available for Linux.
Explore the Download > Tools > Administration page at https://www.ibphoenix.com for all of the options.
Remember: you can use a Windows client to access a Linux server and vice-versa. |
6. Working with databases
In this part of the manual you will learn:
-
how to connect to an existing database,
-
how to create a database,
-
and some things you should know about Firebird SQL.
In as much as remote connections are involved, we will use the recommended TCP/IP protocol.
6.1. Connection strings
If you want to connect to a database or create one you have to supply, amongst other things, a connection string to the client application (or, if you are a programmer, to the routines you are calling). A connection string uniquely identifies the location of the database on your computer, local network, or even the Internet.
6.1.1. Local connection strings
An explicit local connection string consists of the path + filename specification in the native format of the filesystem used on the server machine, for example
-
on a Linux or other Unix-like server:
/opt/firebird/examples/empbuild/employee.fdb
-
on a Windows server:
C:\Biology\Data\Primates\Apes\populations.fdb
Many clients also allow relative path strings (e.g. “..\examples\empbuild\employee.fdb
”) but you should use these with caution, as it’s not always obvious how they will be expanded.
Getting an error message is annoying enough, but applying changes to another database than you thought you were connected to may be disastrous.
Instead of a file path, the local connection string may also be a database alias that is defined in databases.conf
, as mentioned earlier.
The format of the alias depends only on how it’s defined in the configuration file, not on the server filesystem.
Examples are:
-
zappa
-
blackjack.fdb
-
poker
Upon receiving a local connection string, the Firebird client will first attempt to make a direct, embedded connection to the database file, bypassing authentication but respecting the SQL privileges and restrictions of the supplied user and/or role name.
That is, if the Engine12
provider is enabled in firebird.conf
or databases.conf
— which it is by default.
If the database file exists, but the connection fails because the client process doesn’t have the required access privileges to the file, a client-server connection is attempted (by the Loopback
provider), in this order:
-
Using TCP/IP via
localhost
; -
On Windows: using WNET (a.k.a. NetBEUI or Named Pipes), on the local machine;
-
On Windows: using XNET (shared memory) on the local machine.
You can force Firebird to use a certain protocol (and skip the embedded connection attempt) by prepending the protocol in URL style:
-
inet://zappa
(TCP/IP connection using an alias on the local machine) -
inet:///opt/firebird/examples/citylife.fdb
(TCP/IP connection using an absolute path on the local Posix machine — notice the extra slash for the root dir) -
inet://C:\Work\Databases\Drills.fdb
(TCP/IP connection using an absolute path on the local Windows machine) -
wnet://doggybase
(NetBEUI — named pipes — connection using an alias on the local Windows machine) -
wnet://D:\Fun\Games.fdb
(NetBEUI — named pipes — connection using an absolute path on the local Windows machine) -
xnet://security.db
(XNET connection using an alias on the local Windows machine) -
xnet://C:\Programmas\Firebird\Firebird_3_0\security3.fdb
(XNET connection using the full path on the local Windows machine)
If your XNET connections fail, it may be because the local protocol isn’t working properly on your machine.
If you’re running Windows Vista, 2003 or XP with terminal services enabled, this can often be fixed by setting If setting |
6.1.2. TCP/IP connection strings
A TCP/IP connection string consists of:
-
a server name or IP address
-
an optional slash (“
/
”) plus port number or service name -
a colon (“
:
”) -
either the absolute path + filename on the server machine, or an alias defined on the server machine.
Examples:
-
On Linux/Unix:
pongo:/opt/firebird/examples/empbuild/employee.fdb bongo/3052:fury 112.179.0.1:/var/Firebird/databases/butterflies.fdb localhost:blackjack.fdb
-
On Windows:
siamang:C:\Biology\Data\Primates\Apes\populations.fdb sofa:D:\Misc\Friends\Rich\Lenders.fdb inca/fb_db:D:\Traffic\Roads.fdb 127.0.0.1:Borrowers
Notice how the aliased connection strings don’t give any clue about the server OS. And they don’t have to, either: you talk to a Linux Firebird server just like you talk to a Windows Firebird server. In fact, specifying an explicit database path is one of the rare occasions where you have to be aware of the difference.
6.1.3. NetBEUI connection strings
A NetBEUI (named pipes) connection string consists of:
-
two backslashes (“
\\
”) -
a server name or IP address
-
an optional at sign (“
@
”) plus port number or service name -
another backslash (“
\
”) -
either the absolute path + filename on the server machine, or an alias defined on the server machine.
Examples:
-
On Windows, the exact same databases as in the TCP/IP examples:
\\siamang\C:\Biology\Data\Primates\Apes\populations.fdb \\sofa\D:\Misc\Friends\Rich\Lenders.fdb \\inca@fb_db\D:\Traffic\Roads.fdb \\127.0.0.1\Borrowers
6.1.4. URL-style connection strings
Local URL-style connection strings have already been introduced.
A remote URL-style connection string consists of:
-
a protocol name (
inet
orwnet
) followed by a colon and two slashes (“://
”) -
a server name or IP address
-
an optional colon (“
:
”) plus port number or service name -
a slash (“
/
”) -
either the absolute path + filename on the server machine, or an alias defined on the server machine.
Examples:
-
On Linux/Unix:
inet://pongo//opt/firebird/examples/empbuild/employee.fdb inet://bongo:3052/fury inet://112.179.0.1//var/Firebird/databases/butterflies.fdb inet://localhost/blackjack.fdb
-
On Windows:
inet://siamang/C:\Biology\Data\Primates\Apes\populations.fdb inet://sofa:4044/D:\Misc\Friends\Rich\Lenders.fdb wnet://inca:fb_db/D:\Traffic\Roads.fdb wnet://127.0.0.1/Borrowers
Since XNET is a purely local protocol, you can’t have remote connection strings starting with xnet://
.
6.2. Connecting to an existing database
A sample database named employee.fdb
is located in the examples/empbuild
subdirectory of your Firebird installation.
It is also reachable under its alias employee
.
You can use this database to “try your wings”.
If you move or copy the sample database, be sure to place it on a hard disk that is physically attached to your server machine. Shares, mapped drives or (on Unix) mounted SMB (Samba) file systems will not work. The same rule applies to any databases that you create or use.
Connecting to a Firebird database requires — implicit or explicit — authentication.
In order to work with objects inside the database, such as tables, views and functions, you (i.e. the Firebird user you’re logged in as) need explicit permissions on those objects, unless you own them (you own an object if you have created it) or if you’re connected as user SYSDBA
or with the role RDB$ADMIN
.
In the example database employee.fdb
, sufficient permissions have been granted to PUBLIC
(i.e. anybody who cares to connect) to enable you to view and modify data to your heart’s content.
For simplicity here, we will look at authenticating as SYSDBA
using the password masterkey
.
Also, to keep the lines in the examples from running off the right edge, we will work with local databases and use aliases wherever possible.
Of course everything you’ll learn in these sections can also be applied to remote databases, simply by supplying a full TCP/IP connection string.
6.2.1. Connecting with isql
Firebird ships with a text-mode client named isql (Interactive SQL utility).
You can use it in several ways to connect to a database.
One of them, shown below, is to start it in interactive mode.
Go to the directory where the Firebird tools reside (see Default disk locations if necessary) and type isql
(Windows) or ./isql
(Linux) at the command prompt.
[In the following examples, means “hit Enter”]
C:\Programmas\Firebird\Firebird_3_0>isql Use CONNECT or CREATE DATABASE to specify a database SQL>connect xnet://employee user sysdba password masterkey;
|
You can optionally enclose the path, the user name and/or the password in single ( |
At this point, isql
will inform you that you are connected:
Database: xnet://employee, User: SYSDBA SQL>
You can now continue to play about with the employee
database.
With isql
you can query data, get information about the metadata, create database objects, run data definition scripts and much more.
To get back to the OS command prompt, type:
SQL>quit;
You can also type EXIT
instead of QUIT
, the difference being that EXIT
will first commit any open transactions, making your modifications permanent.
6.2.2. Connecting with a GUI client
Some GUI client tools take charge of composing the CONNECT
string for you, using server, path (or alias), user name and password information that you type into prompting fields.
Supply the various elements as described in the preceding topic.
Notes
|
6.3. Creating a database using isql
There is more than one way to create a database with isql
.
Here, we will look at one simple way to create a database interactively — although, for your serious database definition work, you should create and maintain your metadata objects using data definition scripts.
6.3.1. Starting isql
To create a database interactively using the isql
command shell, type isql
(Windows) or ./isql
(Linux) at the command prompt in the directory where the Firebird tools are.
[In the following examples, means “hit Enter”]
C:\Programmas\Firebird\Firebird_3_0>isql
Use CONNECT or CREATE DATABASE to specify a database
6.3.2. The CREATE DATABASE statement
Now you can create your new database interactively.
Let’s suppose that you want to create a database named test.fdb
and store it in a directory named data
on your D
drive:
SQL>create database 'D:\data\test.fdb' page_size 8192 CON>user 'sysdba' password 'masterkey';
|
The database will be created and, after a few moments, the SQL prompt will reappear. You are now connected to the new database and can proceed to create some test objects in it.
But to verify that there really is a database there, let’s first type in this query:
SQL>select * from rdb$relations;
Although you haven’t created any tables yet, the screen will fill up with a large amount of data!
This query selects all of the rows in the system table RDB$RELATIONS
, where Firebird stores the metadata for tables.
An “empty” database is not really empty: it contains a number of system tables and other objects.
The system tables will grow as you add more user objects to your database.
To get back to the command prompt type QUIT
or EXIT
, as explained in the section on connecting.
6.3.3. Creating a database as a non-privileged user
In Firebird 3, if you try to create a database other than in embedded mode as someone who is not a Firebird admin (i.e. SYSDBA
or an account with equal rights), you may be in for a surprise:
SQL>create database 'xnet://D:\data\mydb.fdb' user 'john' password 'lennon';
Statement failed, SQLSTATE = 28000
no permission for CREATE access to DATABASE D:\DATA\MYDB.FDB
Non-admin users must explicitly be granted the right to create databases by a Firebird admin:
SQL>grant create database to user john;
After that, they can create databases.
Notice that with a serverless connection, i.e. without specifying a host name or protocol before the database name (and Engine12
enabled!), Firebird won’t deny any CREATE DATABASE
statement.
It will only fail if the client process doesn’t have sufficient rights in the directory where the database is to be created.
6.4. Firebird SQL
Every database management system has its own idiosyncrasies in the ways it implements SQL. Firebird adheres to the SQL standard more rigorously than most other RDBMSes. Developers migrating from products that are less standards-compliant often wrongly suppose that Firebird is quirky, whereas many of its apparent quirks are not quirky at all.
6.4.1. Division of an integer by an integer
Firebird accords with the SQL standard by truncating the result (quotient) of an integer/integer calculation to the next lower integer. This can have bizarre results unless you are aware of it.
For example, this calculation is correct in SQL:
1 / 3 = 0
If you are upgrading from an RDBMS which resolves integer/integer division to a float quotient, you will need to alter any affected expressions to use a float or scaled numeric type for either dividend, divisor, or both.
For example, the calculation above could be modified thus in order to produce a non-zero result:
1.000 / 3 = 0.333
6.4.2. Things to know about strings
String delimiter symbol
Strings in Firebird are delimited by a pair of single quote (apostrophe) symbols: 'I am a string'
(ASCII code 39, not 96).
If you used earlier versions of Firebird’s relative, InterBase®, you might recall that double and single quotes were interchangeable as string delimiters.
Double quotes cannot be used as string delimiters in Firebird SQL statements.
Apostrophes in strings
If you need to use an apostrophe inside a Firebird string, you can “escape” the apostrophe character by preceding it with another apostrophe.
For example, this string will give an error:
'Joe's Emporium'
because the parser encounters the apostrophe and interprets the string as 'Joe'
followed by some unknown keywords.
To make it a legal string, double the apostrophe character:
'Joe''s Emporium'
Notice that this is TWO single quotes, not one double-quote.
Concatenation of strings
The concatenation symbol in SQL is two “pipe” symbols (ASCII 124, in a pair with no space between). In SQL, the “+” symbol is an arithmetic operator and it will cause an error if you attempt to use it for concatenating strings.
The following expression prefixes a character column value with the string “Reported by:
”:
'Reported by: ' || LastName
Firebird will raise an error if the result of a string concatenation exceeds the maximum (var)char size of 32 Kb. If only the potential result — based on variable or field size — is too long you’ll get a warning, but the operation will be completed successfully. (In pre-2.0 Firebird, this too would cause an error and halt execution.)
See also the section below, Expressions involving NULL
, about concatenating in expressions involving NULL
.
Double-quoted identifiers
Before the SQL-92 standard, it was not legal to have object names (identifiers) in a database that duplicated keywords in the language, were case-sensitive or contained spaces. SQL-92 introduced a single new standard to make any of them legal, provided that the identifiers are defined within pairs of double-quote symbols (ASCII 34) and were always referred to using double-quote delimiters.
The purpose of this “gift” was to make it easier to migrate metadata from non-standard RDBMSes to standards-compliant ones. The down-side is that, if you choose to define an identifier in double quotes, its case-sensitivity and the enforced double-quoting will remain mandatory.
Firebird does permit a slight relaxation under a very limited set of conditions. If the identifier which was defined in double-quotes:
-
was defined as all upper-case,
-
is not a keyword, and
-
does not contain any spaces,
...then it can be used in SQL unquoted and case-insensitively. (But as soon as you put double-quotes around it, you must match the case again!)
Don’t get too smart with this!
For instance, if you have tables “ SQL>select * from TestTable; ...you will get the records from “ |
Unless you have a compelling reason to define quoted identifiers, it is recommended that you avoid them. Firebird happily accepts a mix of quoted and unquoted identifiers — so there is no problem including that keyword which you inherited from a legacy database, if you need to.
Some database admin tools enforce double-quoting of all identifiers by default. Try to choose a tool which makes double-quoting optional. |
6.4.3. Expressions involving NULL
In SQL, NULL
is not a value.
It is a condition, or state, of a data item, in which its value is unknown.
Because it is unknown, NULL
cannot behave like a value.
When you try to perform arithmetic on NULL
, or involve it with values in other expressions, the result of the operation will almost always be NULL
.
It is not zero or blank or an “empty string” and it does not behave like any of these values.
Below are some examples of the types of surprises you will get if you try to perform calculations and comparisons with NULL
.
The following expressions all return NULL
:
-
1 + 2 + 3 + `NULL`
-
not (NULL)
-
'Home ' || 'sweet ' || NULL
You might have expected 6 from the first expression and “Home sweet
” from the third, but as we just said, NULL
is not like the number 0 or an empty string — it’s far more destructive!
The following expression:
FirstName || ' ' || LastName
will return NULL
if either FirstName
or LastName
is NULL
.
Otherwise it will nicely concatenate the two names with a space in between — even if any one of the variables is an empty string.
Think of |
Now let’s examine some PSQL (Procedural SQL) examples with if
-constructs:
-
Equals (‘
=
’)if (a = b) then MyVariable = 'Equal'; else MyVariable = 'Not equal';
After executing this code,
MyVariable
will be'Not equal'
if botha
andb
areNULL
. The reason is thata = b
yieldsNULL
if at least one of them isNULL
. If the test expression of an “if
” statement isNULL
, it behaves likefalse
: the ‘then
’ block is skipped, and the ‘else
’ block executed.Although the expression may behave like
false
in this case, it’s stillNULL
. If you try to invert it usingnot()
, what you get is anotherNULL
— not “true
”. -
Not equals (‘
<>
’)if (a <> b) then MyVariable = 'Not equal'; else MyVariable = 'Equal';
Here,
MyVariable
will be'Equal'
ifa
isNULL
andb
isn’t, or vice versa. The explanation is analogous to that of the previous example.
The DISTINCT
keyword comes to the rescue!
Firebird 2 and above implement a new use of the DISTINCT
keyword allowing you to perform (in)equality tests that take NULL
into account.
The semantics are as follows:
-
Two expressions are
DISTINCT
if they have different values or if one isNULL
and the other isn’t; -
They are
NOT DISTINCT
if they have the same value or if they are bothNULL
.
Notice that if neither operand is NULL
, DISTINCT
works exactly like the “<>
” operator, and NOT DISTINCT
like the “=
” operator.
DISTINCT
and NOT DISTINCT
always return true
or false
, never NULL
.
Using DISTINCT
, you can rewrite the first PSQL example as follows:
if (a is not distinct from b) then
MyVariable = 'Equal';
else
MyVariable = 'Not equal';
And the second as:
if (a is distinct from b) then
MyVariable = 'Not equal';
else
MyVariable = 'Equal';
These versions will give you the results that a normal (i.e. not SQL-brainwashed) human being would expect, whether there are NULL
s involved or not.
7. Protecting your data
7.1. Backup
Firebird comes with two utilities for backing up and restoring your databases: gbak and nbackup.
Both can be found in the bin
subdirectory of your Firebird installation.
Firebird databases can be backed up while users are connected to the system and going about their normal work.
The backup will be taken from a snapshot of the database at the time the backup began.
Regular backups and occasional restores should be a scheduled part of your database management activity.
Except in nbackup’s lock mode, do not use external proprietary backup utilities or file-copying tools such as WinZip, |
Study the warnings in the next section about database activity during restores! |
More information about gbak
can be found here (HTML and PDF version, same content):
https://www.firebirdsql.org/file/documentation/html/en/firebirddocs/gbak/firebird-gbak.html
https://www.firebirdsql.org/file/documentation/pdf/en/firebirddocs/gbak/firebird-gbak.pdf
The nbackup
manual is here (again same content in HTML and PDF):
7.2. How to corrupt a database
The following sections constitute a summary of things not to do if you want to keep your Firebird databases in good health.
7.2.1. Disabling forced writes
Firebird is installed with forced writes (synchronous writes) enabled by default. Modifications are written to disk immediately upon posting.
It is possible to configure a database to use asynchronous data writes — whereby modified or new data are held in the memory cache for periodic flushing to disk by the operating system’s I/O subsystem. The common term for this configuration is forced writes off (or disabled). It is sometimes resorted to in order to improve performance during large batch operations.
Disabling forced writes on Windows
The big warning here is: do not disable forced writes on a Windows server. It has been observed that the Windows server platforms do not flush the write cache until the Firebird service is shut down. Apart from power interruptions, there is just too much that can go wrong on a Windows server. If it should hang, the I/O system goes out of reach and your users' work will be lost in the process of rebooting.
7.2.2. Restoring a backup to a running database
One of the restore options in the gbak
utility (gbak -rep[lace_database]
) allows you to restore a gbak file over the top of an existing database.
It is possible for this style of restore to proceed without warning while users are logged in to the database.
Database corruption is almost certain to be the result.
Notice that the shortest form of this command is These changes have been made because many users thought that the |
Be aware that you will need to design your admin tools and procedures to prevent any possibility for any user (including |
If is practicable to do so, it is recommended to restore to spare disk space using the gbak -c
option and test the restored database using isql
or your preferred admin tool.
If the restored database is good, shut down the old database (you can use the gfix
command-line tool for this;
see Firebird Database Housekeeping Utility (HTML) or Firebird Database Housekeeping Utility (PDF)).
Make a filesystem copy of the old database just in case and then copy the restored database file(s) over their existing counterparts.
8. How to get help
The community of willing helpers around Firebird goes a long way back, to many years before the source code for its ancestor, InterBase® 6, was made open source. Collectively, the Firebird community does have all the answers! It even includes some people who have been involved with it since it was a design on a drawing board in a bathroom in Boston.
-
Visit the official Firebird Project site at https://www.firebirdsql.org and join the user support lists, in particular
firebird-support`
. Look at https://www.firebirdsql.org/en/mailing-lists/ for instructions. -
Use the Firebird documentation index at https://www.firebirdsql.org/en/documentation/.
-
Visit the Firebird knowledge site at https://www.ibphoenix.com to look up a vast collection of information about developing with and using Firebird. IBPhoenix also sells a Developer CD with the Firebird binaries and lots of documentation.
-
Order the official three-volume Firebird Book, Second Edition at https://www.ibphoenix.com/products/books/firebird_book, for more than 1200 pages jam-packed with Firebird information. (Notice: at the time of this writing, the Firebird Book is not yet up-to-date with Firebird 3.)
-
Read the Release Notes for your Firebird version!
9. How to give help
Firebird exists, and continues to be improved, thanks to a community of volunteers who donate their time and skills to bring you this wonderful piece of software. But volunteer work alone is not enough to keep an enterprise-level RDBMS such as Firebird up-to-date. The Firebird Foundation supports Firebird development financially by issuing grants to designers and developers. If Firebird is useful to you and you’d like to give something back, please visit the Foundation’s pages and consider making a donation or becoming a member or sponsor.
10. The Firebird Project
The developers, designers and testers who gave you Firebird and several of the drivers are members of the Firebird open source project at SourceForge, that amazing virtual community that is home to thousands of open source software teams. The Firebird project’s address there is https://sourceforge.net/projects/firebird/. At that site are the source code tree, the download packages and a number of technical files related to the development and testing of the code bases.
The Firebird Project developers and testers use an email list forum — firebird-devel
Google Group — as their “virtual laboratory” for communicating with one another about their work on enhancements, bug-fixing and producing new versions of Firebird.
Anyone who is interested in watching their progress can join this forum.
However, user support questions are a distraction which they do not welcome.
Please do not try to post your user support questions there! These belong in the firebird-support
group.
Happy Firebirding!
Appendix A: Document History
The exact file history is recorded in the firebird-documentation git repository; see https://github.com/FirebirdSQL/firebird-documentation
Revision History | |||
---|---|---|---|
0.0 |
2002 |
IBP |
Published as Chapter One of Using Firebird. |
1.0 |
2003 |
IBP |
Published separately as a free Quick Start Guide. |
1.x |
Jun 2004 |
IBP |
Donated to Firebird Project by IBPhoenix. |
2.0 |
27 Aug 2004 |
PV |
|
2.1 |
20 Feb 2005 |
PV |
|
2.1.1 |
1 Mar 2005 |
PV |
Changed |
2.1.2 |
8 Apr 2005 |
PV |
|
2.2 |
2 Dec 2005 |
PV |
|
2.2.1 |
22 Dec 2005 |
PV |
|
3.0 |
21 May 2006 |
PV |
Creation of 2.0 Quick Start Guide, still equal to previous revision except for some version numbers, XML ids etc. |
3.2 |
10 Aug 2006 |
PV |
|
|
|
|
|
3.3 |
15 Oct 2006 |
PV |
|
3.4 |
25 Jan 2007 |
PV |
|
3.5 |
14 Mar 2007 |
PV |
|
3.6 |
21 Sep 2007 |
PV |
|
3.7 |
8 Apr 2008 |
PV |
|
3.8 |
18 Jan 2009 |
PV |
|
3.9 |
4 Sep 2010 |
PV |
|
4.0 |
5 Sep 2010 |
PV |
Creation of 2.5 Quick Start Guide, still equal to previous revision except for some version numbers, XML ids etc. Also removed erroneous id from primary index term in Document History title. |
4.1 |
15 Sep 2010 |
PV |
|
4.2 |
21 Sep 2010 |
PV |
|
4.3 |
8 Jul 2011 |
PV |
|
|
|
|
|
4.4 |
26 Sep 2011 |
PV |
|
5.0 |
11 Apr 2016 |
PV |
Top-level sections up to and including Working with databases extensively reworked to bring them up to date with Firebird 3. Some sections have been moved or completely removed. Mild reworking in other sections. |
5.1 |
14 Apr 2016 |
PV |
|
5.2 |
25 Apr 2016 |
PV |
|
5.3 |
8 May 2016 |
PV |
Working with databases :: Connection strings :: Local connection strings: |
5.4 |
27 Jun 2020 |
MR |
Conversion to AsciiDoc, minor copy-editing |
5.5 |
25 Sep 2022 |
MR |
Update reference to firebird-devel (switch to Google Groups) |
5.6 |
8 Nov 2023 |
MR |
Remove mention that |
5.7 |
2 Apr 2024 |
MR |
Protocol names are lowercase (#205) |
Appendix B: License notice
The contents of this Documentation are subject to the Public Documentation License Version 1.0 (the “License”); you may only use this Documentation if you comply with the terms of this License. Copies of the License are available at https://www.firebirdsql.org/pdfmanual/pdl.pdf (PDF) and https://www.firebirdsql.org/manual/pdl.html (HTML).
The Original Documentation is titled Firebird Quick Start Guide.
The Initial Writer of the Original Documentation is: IBPhoenix Editors.
Copyright © 2002-2004. All Rights Reserved. Initial Writer contact: hborrie at ibphoenix dot com.
Contributors: Paul Vinkenoog, Mark Rotteveel.
Portions created by Paul Vinkenoog are Copyright © 2004-2016. All Rights Reserved. Contributor contact: paul at vinkenoog dot nl.
Portions created by Mark Rotteveel are Copyright © 2020-2024. All Rights Reserved. (Contributor contact(s): mrotteveel at users dot sourceforge dot net).