Ruby on rails 轨道&x2B;甲骨文+;oracle增强适配器:db:create询问系统密码?
我刚刚更新了一个,不知道为什么我的Ruby on rails 轨道&x2B;甲骨文+;oracle增强适配器:db:create询问系统密码?,ruby-on-rails,oracle,activerecord,Ruby On Rails,Oracle,Activerecord,我刚刚更新了一个,不知道为什么我的rake db:create db:migrate要求我输入Oracle数据库的SYS/SYSTEM密码。我在config/database.yml中配置的Oracle用户具有以下权限: GRANT CREATE SESSION TO my-user; GRANT ALTER SESSION TO my-user; GRANT CREATE SEQUENCE TO my-user; GRANT CREATE SYNONYM TO my-user; GRANT C
rake db:create db:migrate
要求我输入Oracle数据库的SYS/SYSTEM密码。我在config/database.yml
中配置的Oracle用户具有以下权限:
GRANT CREATE SESSION TO my-user;
GRANT ALTER SESSION TO my-user;
GRANT CREATE SEQUENCE TO my-user;
GRANT CREATE SYNONYM TO my-user;
GRANT CREATE VIEW TO my-user;
GRANT CREATE TABLE TO my-user;
GRANT GATHER_SYSTEM_STATISTICS TO my-user;
GRANT CREATE PROCEDURE TO my-user;
GRANT CREATE TRIGGER TO my-user;
GRANT CREATE DATABASE LINK TO my-user;
GRANT CREATE TYPE TO my-user;
这就是Rails给我的提示:
Please provide the SYSTEM password for your Oracle installation (set ORACLE_SYSTEM_PASSWORD to avoid this prompt)
我不明白为什么,我的用户
应该拥有自己的模式所需的所有权限
有什么想法吗?似乎在gem中对rake db:create要求系统密码是硬编码的
def create
system_password = ENV.fetch('ORACLE_SYSTEM_PASSWORD') {
print "Please provide the SYSTEM password for your Oracle installation (set ORACLE_SYSTEM_PASSWORD to avoid this prompt)\n>"
$stdin.gets.strip
}
establish_connection(@config.merge('username' => 'SYSTEM', 'password' => system_password))
begin
connection.execute "CREATE USER #{@config['username']} IDENTIFIED BY #{@config['password']}"
rescue => e
if e.message =~ /ORA-01920/ # user name conflicts with another user or role name
connection.execute "ALTER USER #{@config['username']} IDENTIFIED BY #{@config['password']}"
else
raise e
end
end
connection.execute "GRANT unlimited tablespace TO #{@config['username']}"
connection.execute "GRANT create session TO #{@config['username']}"
connection.execute "GRANT create table TO #{@config['username']}"
connection.execute "GRANT create view TO #{@config['username']}"
connection.execute "GRANT create sequence TO #{@config['username']}"
end
如您所见,它实际上也创建了您在数据库.yml中设置的用户,并为其授予了一些特权
最好跳过rakedb:create
。您可以在生产环境中手动创建一次数据库,在开发/测试环境中,允许系统访问您的Ruby代码是可以的。哦,是的,真丢脸。。。我本来可以自己查源代码的…:-/好的,但是有了这些授权,创建一个绝对有意义的用户。