【温馨提示:本文档所有操作均在root用户下进行】
1、rpm包方式
我选用的安装方式是 使用rpm包安装
执行以下命令进行安装:
$ rpm -ivh FirebirdSS-2.5.9.27139-0.amd64.rpm --force --nodeps
不加–force --nodeps会出现 /bin/sh is needed by xxxxxx(安装包的名字)
安装成功后查看firebird进程
安装位置默认会在/opt/firebird
安装包的详细信息显示是无法重定向安装的【Relocations : (not relocatable)】
$ ps aux | grep firebird
firebird 4684 0.0 0.0 35396 408 ? S Oct15 0:00 /opt/firebird/bin/fbguard -pidfile /var/run/firebird/firebird.pid -daemon -forever
firebird 4686 0.0 0.6 362008 12592 ? Sl Oct15 0:00 /opt/firebird/bin/fbserver
firebird的安装位置默认在/opt/firebird,进入文件夹
$ cd /opt/firebird
$ ls
aliases.conf examples firebird.log IDPLicense.txt lib security2.fdb
bin fb_guard firebird.msg include misc SYSDBA.password
de_DE.msg fbtrace.conf fr_FR.msg intl plugins UDF
doc firebird.conf help IPLicense.txt README WhatsNew
2、tar包方式
执行以下命令解压tar包:
$ tar -zxvf FirebirdSS-2.5.9.27139-0.amd64.tar.gz
# 进入解压后的文件夹
$ cd FirebirdSS-2.5.9.27139-0.amd64
# 使用install.sh进行安装
$ ./install.sh
Firebird super 2.5.9.27139-0.amd64 Installation
Press Enter to start installation or ^C to abort # 键入回车开始安装或者Ctrl+C中止安装
Extracting install data
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
update-rc.d: warning: start runlevel arguments (2 3 5) do not match firebird Default-Start values (2 3 4 5)
Starting Firebird server: Please enter new password for SYSDBA user: root123 # 此处设置用户sysdba的密码
Install completed
安装成功后查看firebird进程
$ ps aux | grep firebird
firebird 18132 0.0 0.0 35388 412 ? S 16:54 0:00 /opt/firebird/bin/fbguard -pidfile /var/run/firebird/firebird.pid -daemon -forever
firebird 18133 0.0 0.0 230664 11048 ? Sl 16:54 0:00 /opt/firebird/bin/fbserver
firebird的安装位置默认在/opt/firebird,进入文件夹
$ cd /opt/firebird
$ ls
aliases.conf examples firebird.log IDPLicense.txt lib security2.fdb
bin fb_guard firebird.msg include misc UDF
de_DE.msg fbtrace.conf fr_FR.msg intl plugins WhatsNew
doc firebird.conf help IPLicense.txt README
# 由于tar包安装方式在安装时已经设置了sysdba用户的密码,所以这里就没有SYSDBA.password文件了
将安装目录加入/etc/profile配置文件,以供firebird全系统可用
$ vi /etc/profile
# 在/etc/profile配置文件中加入以下字段
export FIREBIRD_HOME=/opt/firebird
export PATH=$PATH:$FIREBIRD_HOME/bin
# 加入完成后保存文件,并执行配置文件
$ source /etc/profile
查看缺省登录账户和密码(rpm安装方式)
cat /opt/firebird/SYSDBA.password
会展示以下内容,ISC_USER为用户,ISC_PASSWD为密码
# Firebird generated password for user SYSDBA is:
ISC_USER=sysdba
ISC_PASSWD=4FCEB54C
# generated on koal at time Fri Oct 15 07:00:16 UTC 2021
# Your password can be changed to a more suitable one using the
# /opt/firebird/bin/gsec utility.
◆ gsec:
这是一个安全的系统程序,可以使用命令行的方式来创建、修改和删除数据库用户、改变密码等。必须以SYSDBA来运行gsec,以root身份调用并执行以下命令。
通过以下命令进入安全系统,以后续进行修改密码(若没有将firebird加入到配置文件中,则可以通过到安装目录的bin文件夹下./gsec -user sysdba -password 4FCEB54C
)
gsec -user sysdba -password 4FCEB54C
将会出现一个 GSEC> 的提示符,可以使用display命令显示当前的用户
GSEC> display
user name uid gid admin full name
-------------------------------------------------------------------------------------
SYSDBA 0 0 Sql Server Administrator
缺省的密码不安全,建议更改SYSDBA的密码,可使用以下命令来更改密码
GSEC> modify SYSDBA -pw root123
命令中的root123即为新的密码,可以按照自己的需求来自行设定
1、测试运行
◆ isql:
这是一个交互式SQL工具,类似于Oracle的SQL*Plus和Postgresql的psql命令。可以使用它来测试和运行SQL查询。
firebird自带一个名为employee.fdb的数据库实例,可以使用其测试SQL命令,命令如下:
# 由于一些与数据库相关的系统也会安装名为isql的工具,所以尽量进入到安装目录的bin文件夹中运行isql工具
cd /opt/firebird/bin
./isql /opt/firebird/examples/empbuild/employee.fdb -u sysdba -p root123
# 会显示以下内容,表示连接到了employee数据库
Database: /opt/firebird/examples/empbuild/employee.fdb, User: sysdba
SQL>
注意:employee.fdb每个版本的存放位置不太相同,1.5.2在/opt/firebird/examples/目录下,2.5.9在/opt/firebird/examples/empbuild/,自行在examples文件夹中寻找一下
使用show tables命令可以查看当前所有表,显示以下内容:
SQL> show tables;
COUNTRY CUSTOMER
DEPARTMENT EMPLOYEE
EMPLOYEE_PROJECT JOB
PROJECT PROJ_DEPT_BUDGET
SALARY_HISTORY SALES
SQL>
2、创建数据库
可以使用以下两种方式进行创建数据库
(1)打开isql工具时就指明用户
$ isql -user sysdba -password root123
# 会显示一下信息
Use CONNECT or CREATE DATABASE to specify a database
SQL>
# 输入以下SQL语句创建数据库
SQL> CREATE DATABASE 'firstdb.fdb';
SQL>
# 没有任何响应就说明创建成功
(2)创建数据库时指明用户
$ isql
# 会显示一下信息
Use CONNECT or CREATE DATABASE to specify a database
SQL> CREATE DATABASE 'firstdb.fdb' USER 'sysdba' PASSWORD 'root123';
SQL>
# 没有任何响应就说明创建成功,该数据库归sysdba所有
# 下面创建一个表并插入数据
$ isql firstdb.fdb -user sysdba -password root123
Database: firstdb.fdb, User: sysdba
SQL> CREATE TABLE sales_catalog (
CON> item_id varchar(10) not null primary key,
CON> item_name varchar(40) not null,
CON> item_desc varchar(50)
CON> );
SQL> INSERT INTO sales_catalog VALUES('001', 'Aluminum Wok', 'Chinese wok');
SQL> INSERT INTO sales_catalog VALUES('002', 'Microwave Oven', '300W Microwave oven');
SQL> INSERT INTO sales_catalog VALUES('003', 'Chopsticks extra-long', '60cm chopsticks');
SQL> SELECT * FROM sales_catalog;
ITEM_ID ITEM_NAME ITEM_DESC
=============================================================================
001 Aluminum Wok Chinese wok
002 Microwave Oven 300W Microwave oven
003 Chopsticks extra-long 60cm chopsticks
SQL>
3、添加用户并分配权限
(1)创建用户:使用gsec工具创建用户LiuYu
创建用户的语句格式为:[add 用户名 -pw 密码 -fname 姓 -lname 名]
$ gsec -user sysdba -password root123
# 进入gsec工具输入以下语句创建用户
GSEC> add LiuYu -pw root123 -fname Liu -lname Yu
GSEC>
# 没有任何提示,表示成功;输入以下语句查看当前所有用户
GSEC> display
user name uid gid admin full name
-------------------------------------------------------------------------------
SYSDBA 0 0 Sql Server Administrator
TESTADMIN 0 0 FirstDB Administrator
MASTERYI 0 0 Master Yi
LIUYU 0 0 Liu Yu
GSEC>
(2)分配权限:使用isql工具给指定用户分配权限
分配权限语句格式:GRANT 权限 ON 对象 TO 用户 [with grant option]
权限:SELECT、DELETE、UPDATE、INSERT、ALL
对象:表/视图名
用户:指定的用户,PUBLIC代表所有
with grant option:可选项——让该名使用者拥有指定使用者的权限
撤销权限语句格式:REVOKE 权限 ON 对象 FROM 用户
$ isql firstdb.fdb -user sysdba -password root123
# 进入isql工具使用指定数据库firstdb.fdb
# 输入以下语句给指定用户分配指定表或视图的权限
SQL> GRANT SELECT,UPDATE,INSERT,DELETE ON sales_catalog TO LiuYu;
SQL> quit;
# 没有提示表示语句执行成功,接下来使用新建用户操作firstdb.fdb试验一下权限是否已经分配
$ isql firstdb.fdb -user LiuYu -password root123
Database: firstdb.fdb, User: LiuYu
SQL> SELECT * FROM sales_catalog;
ITEM_ID ITEM_NAME ITEM_DESC
=============================================================================
001 Aluminum Wok Chinese wok
002 Microwave Oven 300W Microwave oven
003 Chopsticks extra-long 60cm chopsticks 004 What is this 762mm ammo
SQL> DELETE FROM sales_catalog;
SQL> INSERT INTO sales_catalog VALUES('666', 'Lucky Dog', 'You are so lucky');
SQL> SELECT * FROM sales_catalog;
ITEM_ID ITEM_NAME ITEM_DESC
=============================================================================
001 Lucky Dog You are so lucky
SQL>
1、若不指明用户则会出现以下报错,意思就是未定义用户名和密码
Statement failed, SQLSTATE = 28000
Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
只需要在创建数据库时指明用户即可,上面的两种方式都可以。
2、在创建数据库的过程中很有可能出现以下报错
Statement failed, SQLSTATE = 08001
I/O error during “open O_CREAT” operation for file “/opt/firebird/examples/firstdb.fdb”
-Error while trying to create file
-Permission denied
这个是因为其他用户对examples这个文件夹没有写的权限,所以无法创建文件
可以考虑新建一个文件夹作为今后数据库存储的位置,将这个文件夹的权限更改为所有用户可读写
$ cd /opt/firebird
$ mkdir db
# 给db文件夹 添加其他用户的写权限
$ chmod o+w db/
# 给db文件夹 添加所有用户的读、写、执行权限
$ chmod a+rwx db/
之后再往db文件夹创建数据库就不会报错了
猜测(未验证,仅为个人猜想):
用户firebird是在安装firebird之后被添加,由于安装时必须使用root权限,firebird的大部分文件的拥有者都为root,小部分文件的拥有者为firebird。
个人认为可能是firebird在创建数据库时使用的是firebird用户,若向拥有者为firebird的文件夹中创建文件应该是没有问题的,而在向拥有者为root的文件夹中写入文件的时候,要看此文件夹对其他用户(也就是实际创建数据库的用户)的写权限是否开启。