diff options
Diffstat (limited to 'activerecord')
| -rw-r--r-- | activerecord/CHANGELOG.md | 5 | ||||
| -rw-r--r-- | activerecord/lib/active_record/tasks/mysql_database_tasks.rb | 4 | ||||
| -rw-r--r-- | activerecord/test/cases/tasks/mysql_rake_test.rb | 20 | 
3 files changed, 26 insertions, 3 deletions
| diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 3ef21ab194..e5ab6bac58 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,10 @@  ## Rails 4.0.0 (unreleased) ## +*   `rake db:create` does not change permissions of the MySQL root user. +    Fixes #8079. + +    *Yves Senn* +  *   The length of the `version` column in the `schema_migrations` table      created by the `mysql2` adapter is 191 if the encoding is "utf8mb4". diff --git a/activerecord/lib/active_record/tasks/mysql_database_tasks.rb b/activerecord/lib/active_record/tasks/mysql_database_tasks.rb index 10696258c9..50569d2462 100644 --- a/activerecord/lib/active_record/tasks/mysql_database_tasks.rb +++ b/activerecord/lib/active_record/tasks/mysql_database_tasks.rb @@ -26,7 +26,9 @@ module ActiveRecord            $stdout.print error.error            establish_connection root_configuration_without_database            connection.create_database configuration['database'], creation_options -          connection.execute grant_statement.gsub(/\s+/, ' ').strip +          if configuration['username'] != 'root' +            connection.execute grant_statement.gsub(/\s+/, ' ').strip +          end            establish_connection configuration          else            $stderr.puts "Couldn't create database for #{configuration.inspect}, #{creation_options.inspect}" diff --git a/activerecord/test/cases/tasks/mysql_rake_test.rb b/activerecord/test/cases/tasks/mysql_rake_test.rb index dadcca5b7f..816bd62751 100644 --- a/activerecord/test/cases/tasks/mysql_rake_test.rb +++ b/activerecord/test/cases/tasks/mysql_rake_test.rb @@ -71,7 +71,7 @@ module ActiveRecord          return skip("only tested on mysql")        end -      @connection    = stub(:create_database => true, :execute => true) +      @connection    = stub("Connection", create_database: true)        @error         = Mysql::Error.new "Invalid permissions"        @configuration = {          'adapter'  => 'mysql', @@ -90,6 +90,7 @@ module ActiveRecord      end      def test_root_password_is_requested +      assert_permissions_granted_for "pat"        skip "only if mysql is available" unless defined?(::Mysql)        $stdin.expects(:gets).returns("secret\n") @@ -97,6 +98,7 @@ module ActiveRecord      end      def test_connection_established_as_root +      assert_permissions_granted_for "pat"        ActiveRecord::Base.expects(:establish_connection).with(          'adapter'  => 'mysql',          'database' => nil, @@ -108,6 +110,7 @@ module ActiveRecord      end      def test_database_created_by_root +      assert_permissions_granted_for "pat"        @connection.expects(:create_database).          with('my-app-db', :charset => 'utf8', :collation => 'utf8_unicode_ci') @@ -115,12 +118,18 @@ module ActiveRecord      end      def test_grant_privileges_for_normal_user -      @connection.expects(:execute).with("GRANT ALL PRIVILEGES ON my-app-db.* TO 'pat'@'localhost' IDENTIFIED BY 'wossname' WITH GRANT OPTION;") +      assert_permissions_granted_for "pat" +      ActiveRecord::Tasks::DatabaseTasks.create @configuration +    end +    def test_do_not_grant_privileges_for_root_user +      @configuration['username'] = 'root' +      @configuration['password'] = ''        ActiveRecord::Tasks::DatabaseTasks.create @configuration      end      def test_connection_established_as_normal_user +      assert_permissions_granted_for "pat"        ActiveRecord::Base.expects(:establish_connection).returns do          ActiveRecord::Base.expects(:establish_connection).with(            'adapter'  => 'mysql', @@ -142,6 +151,13 @@ module ActiveRecord        ActiveRecord::Tasks::DatabaseTasks.create @configuration      end + +    private +      def assert_permissions_granted_for(db_user) +        db_name = @configuration['database'] +        db_password = @configuration['password'] +        @connection.expects(:execute).with("GRANT ALL PRIVILEGES ON #{db_name}.* TO '#{db_user}'@'localhost' IDENTIFIED BY '#{db_password}' WITH GRANT OPTION;") +      end    end    class MySQLDBDropTest < ActiveRecord::TestCase | 
