Raylar: FATAL - Kullanıcı için eş kimlik doğrulaması başarısız oldu (PG :: Hata)


143

Gelişimi Ubuntu 11.10 ve RubyMine'de çalıştırıyorum

İşte database.yml için geliştirme ayarlarım: RubyMine'ın benim için yarattığı

development:
  adapter: postgresql
  encoding: unicode
  database: mydb_development
  pool: 5
  username: myuser
  password:

Uygulamayı çalıştırmaya çalıştığımda, bu hatayı aşağıda alıyorum, henüz bir 'proje' kullanıcı oluşturmadım, ama nasıl bir kullanıcı oluşturabilirim ve postgres'de bir veritabanı verebilirim? bu sorun varsa, bu görev için Ubuntu'da kullanılması önerilen araç nedir? sorun bu değilse, lütfen tavsiye.

Exiting
/home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `initialize': FATAL:  Peer authentication failed for user "project" (PG::Error)
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `new'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `connect'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:329:in `initialize'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:303:in `new_connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:313:in `checkout_new_connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:237:in `block (2 levels) in checkout'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `loop'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `block in checkout'
    from /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:229:in `checkout'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:308:in `clear_cache!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/railtie.rb:91:in `block (2 levels) in <class:Railtie>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:418:in `_run__757346023__prepare__404863399__callbacks'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:405:in `__run_callback'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:385:in `_run_prepare_callbacks'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:81:in `run_callbacks'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:74:in `prepare!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:48:in `prepare!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/application/finisher.rb:47:in `block in <module:Finisher>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `instance_exec'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `run'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:55:in `block in run_initializers'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `each'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `run_initializers'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/application.rb:136:in `initialize!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
    from /home/sam/RubymineProjects/project/config/environment.rb:5:in `<top (required)>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `block in require'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
    from /home/sam/RubymineProjects/project/config.ru:4:in `block in <main>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
    from /home/sam/RubymineProjects/project/config.ru:1:in `new'
    from /home/sam/RubymineProjects/project/config.ru:1:in `<main>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands/server.rb:46:in `app'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands/server.rb:70:in `start'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:55:in `block in <top (required)>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:50:in `tap'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:50:in `<top (required)>'
    from /home/sam/RubymineProjects/project/script/rails:6:in `require'
    from /home/sam/RubymineProjects/project/script/rails:6:in `<top (required)>'
    from -e:1:in `load'
    from -e:1:in `<main>'

Process finished with exit code 1

Yanıtlar:


315

Sunucunuza postresql yüklediyseniz, sadece host: localhost to database.yml'yi yüklediyseniz, genellikle havuzun bulunduğu yere atarım: 5. Aksi takdirde localhost değilse kesinlikle bu uygulamayı veritabanını nerede bulacağını söyleyin.

development:
  adapter: postgresql
  encoding: unicode
  database: kickrstack_development
  host: localhost
  pool: 5
  username: kickrstack
  password: secret

Bir veritabanı oluşturarak ve bağlantıyı kurmak için uygulamanızın kullanıcısına sahiplik atayarak kullanıcı kimlik bilgilerinizin doğru ayarlandığından emin olun. Postgresql 9'da yeni bir kullanıcı oluşturmak için şunu çalıştırın:

sudo -u postgres psql

Eğer yapmadıysanız, postgresql kullanıcı şifresini ayarlayın, sadece ters eğik şifre.

postgres=# \password

Yeni bir kullanıcı ve şifre ve kullanıcının yeni veritabanını oluşturun:

postgres=# create user "guy_on_stackoverflow" with password 'keepitonthedl';
postgres=# create database "dcaclab_development" owner "guy_on_stackoverflow"; 

Şimdi veritabanı, kullanıcı, parola oluşturmayı onayladıktan ve bu ayrıcalıkları ayarladıktan sonra database.yml dosyanızı güncelleyin. Ana bilgisayarı unutma: localhost.


2
hala oturum açma ve localhost üzerinden bağlantıyı tamamlama konusunda sorun yaşıyorsanız, terminal aracılığıyla postgresql'e geri dönün ve bağlantınızın kullanıcı ayrıcalıklarını oluşturmak için bu 8.2 kurallarından bazılarını uygulayın, sözdizimi DATABASE [dbname] ile [usrname] 'a VERİLİR. Bu sözdizimi aynı şekilde psql 9+ üzerinde çalışır, ancak muhtemelen kullanıcının sahip olduğu veritabanlarındaki izinleri TÜMÜNÜ VERMEDEN önce değiştirebilirsiniz: postgresql.org/docs/8.2/static/sql-grant.html
Bent Cardan

38
host: localhostve pool: 5benim yapılandırmada eksikti. Bunları ekledikten sonra hata kayboldu.
Amit Patel

21
Benim host: localhostiçin eksikti. ekledikten sonra her şey işe yaradı. Bu Ubuntu 13.04
Jesse

7
Stres için de önemli: SEMİKOLONLARI UNUTMAYIN .
Maarten

Şahsen kurulumun db: setup ile çalıştırılabilmesinin önemli olduğunu düşünüyorum. Aksi takdirde yeni bir dağıtım ortamı oluşturma konusunda sorunlarınız olacaktır, ancak bu açıklama bir geliştirme ortamı için işe yarar.
Ashley Raiteri

54

Bu, raylar uygulamanızın Ubuntu 13.10 geliştirme ortamındaki postgres ile çalışmasını sağlamanın en kusursuz yoludur .

1) Gemfile postgres YAML ve 'pg' gem ile raylar uygulaması oluşturun:

$ rails new my_application -d postgresql

2) Bazı CRUD işlevleri verin. Sadece postgres'in işe yarayıp yaramadığını görüyorsanız, bir iskele oluşturun:

$ rails g scaffold cats name:string age:integer colour:string

3) itibarıyla seçeneği bir ana parametresi içermeyen bir YAML oluşturur. Buna ihtiyacım olduğunu buldum. Geliştirme bölümünü düzenleyin ve aşağıdaki parametreleri oluşturun:rails 4.0.1-d postgresql

encoding: UTF-8
host: localhost
database: my_application_development
username: thisismynewusername
password: thisismynewpassword 

Not databaseparametre henüz çıkmamalı bir veritabanı içindir ve usernameve passwordya var olmayan bir rol için birer referans. Bunları daha sonra yaratacağız!

Şu şekilde config/database.ymlgörünmelidir (kopya yapıştırmada utanç yok: D):

development:
  adapter: postgresql
  pool: 5
  # these are our new parameters
  encoding: UTF-8
  database: my_application_development
  host: localhost
  username: thisismynewusername
  password: thisismynewpassword

test:
  # this won't work 
  adapter: postgresql
  encoding: unicode
  database: my_application_test
  pool: 5
  username: my_application
  password:

production:
  # this won't work 
  adapter: postgresql
  encoding: unicode
  database: my_application_production
  pool: 5
  username: my_application
  password:

4) postgres kabuğunu şu komutla başlatın:

$ psql

4a) Geçerli kullanıcınızın (bilgisayar kullanıcınızdaki gibi) karşılık gelen bir yönetim postgres rolü yoksa bu hatayı alabilirsiniz.

psql: FATAL:  role "your_username" does not exist

Şimdi sadece bir kez postgres yükledim, bu yüzden burada yanlış olabilir, ancak postgres otomatik olarak postgres yüklediğiniz kullanıcı ile aynı kimlik bilgileri ile bir yönetim rolü oluşturur düşünüyorum.

4b) Bu, psql komutunu kullanmak ve kabuğu başlatmak için postgres yükleyen kullanıcıya geçmeniz gerektiği anlamına gelir:

$ sudo su postgres

Ve sonra koş

$ psql

5) Postgres kabuğunda olduğunuzu bileceksiniz, çünkü terminaliniz şöyle görünecek:

$ psql
psql (9.1.10)
Type "help" for help.

postgres=# 

6) postgresql sözdizimi kullanarak, hadi biz belirtilen kullanıcı oluşturmak config/database.ymlbireyin gelişimi bölümünde:

postgres=# CREATE ROLE thisismynewusername WITH LOGIN PASSWORD 'thisismynewpassword';

Şimdi, burada bazı incelikler var, hadi onların üzerinden geçelim.

  • Rolün adınızı, thisismynewusername , gelmez etrafında her türlü tırnak var
  • Anahtar kelime belirtin LOGIN sonra İLE . Bunu yapmazsanız, rol yine de oluşturulur, ancak veritabanında oturum açamaz!
  • Rolün şifresi, thisismynewpassword , tek tırnak içinde olmalıdır. Çift tırnak değil .
  • Sonuna yarım kolon ekleyin;)

Bunu terminalinizde görmelisiniz:

postgres=#
CREATE ROLE
postgres=#

Bu, "ROLE OLUŞTURULDU" anlamına gelir, ancak postgres uyarıları git hub'ın aynı zorunlu kurallarını benimsiyor gibi görünüyor.

7) Şimdi hala postgres kabuğunda, YAML'de belirlediğimiz adla bir veritabanı oluşturmamız gerekiyor. 6. adımda oluşturduğumuz kullanıcıyı sahibi yapın:

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;

Başarılı olup olmadığınızı bileceksiniz, çünkü çıktıyı alacaksınız:

CREATE DATABASE

8) Postgres kabuğundan çıkın:

\q

9) Şimdi gerçek anı:

$ RAILS_ENV=development rake db:migrate

Bunu alırsanız:

==  CreateCats: migrating =================================================
-- create_table(:cats)
   -> 0.0028s
==  CreateCats: migrated (0.0028s) ========================================

Tebrikler, postgres uygulamanızla mükemmel çalışıyor.

9a) Yerel makinemde izin hatası alıyorum. Bunu tam olarak hatırlayamıyorum, ama bu çizgiler boyunca bir hataydı

Can't access the files. Change permissions to 666.

Bir üretim makinesinde yinelenen yazma rakipleri ayarlama konusunda çok dikkatli düşünmeyi tavsiye etsem de, yerel olarak tüm uygulamama okuma yazma ayrıcalıklarını verdim:

9b) Bir dizin seviyesine tırmanın:

$ cd ..

9c) my_application dizininin ve tüm içeriğinin izinlerini 666 olarak ayarlayın:

$ chmod -R 0666 my_application

9d) Taşıma işlemini tekrar çalıştırın:

$ RAILS_ENV=development rake db:migrate

==  CreateCats: migrating =================================================
-- create_table(:cats)
   -> 0.0028s
==  CreateCats: migrated (0.0028s) ========================================

Eğer emzirirseniz bazı ipuçları ve püf noktaları

Aşağıdaki adımların tümünü yeniden başlatmadan önce bunları deneyin:

Mynewusername kullanıcısının my_app_developmentveritabanına CRUD yetkisi yok mu? Veritabanını bırakın ve sahibi olarak mynewusername ile tekrar oluşturun:

1) Postgres kabuğunu başlatın:

$ psql

2) my_app_developmentVeritabanını bırakın . Dikkatli ol! Bırak demek tamamen silmek demektir!

postgres=# DROP DATABASE my_app_development;

3) Başka bir tane yeniden oluşturun my_app_developmentve adımı kullanıcı adı yap:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername;

4) kabuktan çıkın:

postgres=# \q

mynewusernameKullanıcı veritabanına giriş yapamıyorum? YAML'de yanlış şifre yazdığınızı ve postgres kabuğunu kullanarak girdiğiniz şifreyi hatırlayamayacağınızı mı düşünüyorsunuz? Rolü YAML şifresi ile değiştirmeniz yeterlidir:

1) YAML'nizi açın ve şifreyi panonuza kopyalayın:

 development:
      adapter: postgresql
      pool: 5
      # these are our new parameters
      encoding: UTF-8
      database: my_application_development
      host: localhost
      username: thisismynewusername
      password: musthavebeenverydrunkwheniwrotethis

2) Postgres kabuğunu başlatın:

$ psql    

3) Güncelleme mynewusernameşifresi. Parolayı yapıştırın ve etrafına tek tırnak işareti koymayı unutmayın:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;

4) kabuktan çıkın:

postgres=# \q

Dbeaver gibi bir veritabanı görüntüleyici aracılığıyla localhost'a bağlanmaya çalışıyorsunuz ve postgres kullanıcı şifrenizin ne olduğunu bilmiyor musunuz? Bu şekilde değiştirin:

1) passwdSüper kullanıcı olarak çalıştırın :

$ sudo passwd postgres

2) için hesap şifrenizi girin sudo(postgres ile ilgisi yoktur):

[sudo] password for starkers: myaccountpassword

3) postgres hesabının yeni şifresini oluşturun:

Enter new UNIX password: databasesarefun
Retype new UNIX password: databasesarefun
passwd: password updated successfully

Bu hata mesajını mı alıyorsunuz ?:

Run `$ bin/rake db:create db:migrate` to create your database
$ rake db:create db:migrate
PG::InsufficientPrivilege: ERROR:  permission denied to create database

4) Kullanıcılarınıza veritabanları oluşturma yeteneği vermeniz gerekir. Psql kabuğundan:

ALTER ROLE thisismynewusername WITH CREATEDB

1
Keşke bu mükemmel çözüm için size +1 s verebilseydim, benim için işe yararsa daha mutlu olurdum. hala parlak bir cevap. hızlı soru, bu parola etrafında backticks değiştirme rolü var mı? ayrıca, daha önce backtick kullanmanıza gerek yok mu?
Mike HR

@ MikeH-R Teşekkürler, utanç sizin için işe yaramıyor! Alakalı YAML'nizin olduğundan emin misiniz host: localhost? Bu benim için gerçek yakaladım. Şifre etrafında tek tırnak gerekir. Klavyemde bu shift+ @. Psql kabuğu ile sadece bazı parametreler etrafında tek tırnak gerekir. Örneğin parola etrafında, örneğin rol adında değil . Dürüst olmak çok
zordur

@ MikeH-R İşleri daha net hale getirmek için cevabımı değiştirdim. Başka bir çatlak geçirmeyi düşünün!
Starkers

Şimdi çözdüm, parlak bir cevap için tekrar teşekkürler, karşılaştığım diğer cevapların çoğu, üretimde iyi olmayan güvenliği gevşetmekti.
Mike HR

29

Kalıcı çözüm için:

Sorun pg_hba'nızda. Bu hat:

local   all             postgres                                peer

Olmalı

local   all             postgres                                md5

Ardından bu dosyayı değiştirdikten sonra postgresql sunucunuzu yeniden başlatın.

Linux'taysanız, komut

sudo service postgresql restart

1
Teşekkür ederim! Gerçek cevap bu.
skplunkerin

9

Bazı adımları izleyerek bu hatayı kaldırdım bu yüzden Ubuntu makinede aynı sorunla karşı karşıyaydım. Postgres kullanıcısına geç

$ sudo su - postgres

şifre isteyecek ve varsayılan şifre postgres

Kullanıcıyı postgres'e geçirdikten sonra psql konsolunu açın

$ psql

bu yüzden birden fazla sürüm mevcutsa postgres sürümünü kontrol edin

psql=# select VERSION();

PostgreSQL 9.1.13 on x86_64-unk....         # so version is 9.1

Şimdi aç postgres user

vim /etc/postgresql/9.1/main/pg_hba.conf

9.1 sürüm dönüş formu üst komutudur

ve değiştir

local   all             postgres                                peer

için

local   all             postgres                                md5

Hizmeti yeniden başlatın

sudo service postgresql restart

Bloguma da adımlar yazıyorum

http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html


Doğru cevabı verdiniz, sürümü kontrol etmeniz gerekmeyen tek bir şeyi kaçırdınız. Psql Alter kullanıcı "kullanıcı adı" 'xyz' parolasını ayarladıktan sonra bu komutu çalıştırarak parolayı değiştirebilirsiniz;
vishu

md5Kimlik doğrulamanın veritabanı kullanıcısı için null olmayan bir parola gerektirdiğini unutmayın (aa Rails uygulaması oluştururken tembelliği en üst düzeye çıkarmaya çalışırken bugün biraz daha var).
Mark Leighton Fisher


4

Eklemek host: localhostbenim için sihirdi

development:
  adapter: postgresql
  database: database_name_here
  host: localhost
  username: user_name_here

0

Peer authentication failed for user (PG::Error)Birim testlerini çalıştırırken bu hata mesajını ( ) alırsanız , test veritabanının mevcut olduğundan emin olun.


0

Geliştirme ortamımda çalışırken de aynı sorunla karşılaştım, sorun şu ki host: localhost,config/database.yml dosyaya .

Yani benim uygulama PostgreSQL veritabanına bağlanamadı, sadece uncommenting sorunu çözdü.

development:
  <<: *default
  database: database_name

  username: database_username 

  password: database_password

  host: localhost

Bu kadar.

Umarım bu yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.