質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

Q&A

解決済

1回答

1562閲覧

【Symfony5チュートリアル】psglにあるpasswordの値を変更したい

cherry2020

総合スコア10

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

0グッド

0クリップ

投稿2021/08/05 22:20

編集2021/08/07 05:25

現在行っていること

  • Symfony5のチュートリアル15章を行っています。
  • 具体的には「管理者画面」について、セキュリティを高めるために、Userエンティティを作成し、「管理者画面」に入るには、ユーザー名とパスワードを答えられる人のみOKにする実装をしていました。

イメージ説明

間違えてしまったこと

  • 「管理者」を一人のユーザーとして、データベースにパスワード設定するために、
    ①パスワードをエンコードし、
    ②エンコードされた値をデータベースに保存する
    処理を行いました。
  • しかし、SQL文の改行に手こずってしまい、自分で設定したエンコードとチュートリアルのエンコードをごちゃ混ぜにして登録してしまいました。

そこから立てた修正するための仮説

  • パスワードをデコードできないか?(管理者画面に入れれば良いため)
  • パスワードの値を更新する

の2通りを考えました。一つ目はググったのですがパスワードに関しては難しそうと諦めました。
2つ目についてUPDATE文を試みたのですがうまく行きません????

イメージ説明

教えて欲しいこと

UPDATE文で対象のディレクトリがないと言われてしまうのはなぜでしょうか。

  • チュートリアルの作業環境と同じように、dockerや、PostgreSQL、php、symfony CLIを使って実践していました。
  • PostgreSQLについては、docker Hubから、イメージをpullして作っています。
  • そもそもUPDATE文のコマンドが誤っているのではないかと思い、教えて欲しいです????

追記 データベースの構造について

  • Doctrineを使用
  • 管理者画面を作成するためにEasyAdminを使用

(1)Conferenceテーブル(Entityディレクトリ配下)

  • city, string, 255, (nullable)no
  • year, string, 4, (nullable)no
  • isInternational, boolean, (nullable)no

(2)Commentテーブル(Entityディレクトリ配下)

  • author, string, 255, (nullable)no
  • text, text, (nullable)no
  • email, string, 255, (nullable)no
  • createdAt, datetime, (nullable)no
  • photoFilename, string, 255, (nullable)yes

関連づけ

  • カンファンレスは n個のコメントを持つので、one-to-many の関連づけをしている

(3)Adminテーブル(Entityディレクトリ配下)

  • カンファレンスへの参加者が、ユーザー登録をする機能は作らない
  • 管理者を一つのユーザー登録とし、認証するシステムを作る
  • そのためにUserエンティティを使って作成した

補足 どうやってAdminテーブル作ったか?

  • 管理者は Doctrine に格納し
  • 管理者のユニークな表示名を username
  • 各ユーザーがパスワードを1つ持つことに(yes)とした

terminal

1noMacBook-Air guestbook % symfony console make:user Admin 2 3 Do you want to store user data in the database (via Doctrine)? (yes/no) [yes]: 4 > yes 5 6 Enter a property name that will be the unique "display" name for the user (e.g. email, username, uuid) [email]: 7 > username 8 9 Will this app need to hash/check user passwords? Choose No if passwords are not needed or will be checked/hashed by some other system (e.g. a single sign-on server). 10 11 Does this app need to hash/check user passwords? (yes/no) [yes]: 12 > yes 13 14 created: src/Entity/Admin.php 15 created: src/Repository/AdminRepository.php 16 updated: src/Entity/Admin.php 17 updated: config/packages/security.yaml 18 19 20 Success! 21 22
  • 上記のように、マイグレーションファイルを作成するときは、ユーザーネームとパスワードの指定しかしていないが、その後の、SQL文を書くときは、"ロール"を書いた。

terminal

1 2$ symfony run psql -c "INSERT INTO admin (id, username, roles, password) \ 3 VALUES (nextval('admin_id_seq'), 'admin', '[\"ROLE_ADMIN\"]', \ 4 '$argon2id$v=19$m=65536,t=4,p=1$BQG+jovPcunctc30xG5PxQ$TiGbx451NKdo+g9vLtfkMy4KjASKSOcnNxjij4gTX1s')" 5 6
(参考)Adminテーブルのマイグレーションファイル

php

1<?php 2 3declare(strict_types=1); 4 5namespace DoctrineMigrations; 6 7use Doctrine\DBAL\Schema\Schema; 8use Doctrine\Migrations\AbstractMigration; 9 10/** 11 * Auto-generated Migration: Please modify to your needs! 12 */ 13final class Version20210804210848 extends AbstractMigration 14{ 15 public function getDescription(): string 16 { 17 return ''; 18 } 19 20 public function up(Schema $schema): void 21 { 22 // this up() migration is auto-generated, please modify it to your needs 23 $this->addSql('CREATE SEQUENCE admin_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); 24 $this->addSql('CREATE TABLE admin (id INT NOT NULL, username VARCHAR(180) NOT NULL, roles JSON NOT NULL, password VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); 25 $this->addSql('CREATE UNIQUE INDEX UNIQ_880E0D76F85E0677 ON admin (username)'); 26 $this->addSql('CREATE UNIQUE INDEX UNIQ_911533C8989D9B62 ON conference (slug)'); 27 } 28 29 public function down(Schema $schema): void 30 { 31 // this down() migration is auto-generated, please modify it to your needs 32 $this->addSql('CREATE SCHEMA public'); 33 $this->addSql('DROP SEQUENCE admin_id_seq CASCADE'); 34 $this->addSql('DROP TABLE admin'); 35 $this->addSql('DROP INDEX UNIQ_911533C8989D9B62'); 36 } 37} 38 39
(参考)Adminテーブルのモデル(エンティティファイル)

php

1<?php 2 3namespace App\Entity; 4 5use App\Repository\AdminRepository; 6use Doctrine\ORM\Mapping as ORM; 7use Symfony\Component\Security\Core\User\UserInterface; 8 9/** 10 * @ORM\Entity(repositoryClass=AdminRepository::class) 11 */ 12class Admin implements UserInterface 13{ 14 /** 15 * @ORM\Id 16 * @ORM\GeneratedValue 17 * @ORM\Column(type="integer") 18 */ 19 private $id; 20 21 /** 22 * @ORM\Column(type="string", length=180, unique=true) 23 */ 24 private $username; 25 26 /** 27 * @ORM\Column(type="json") 28 */ 29 private $roles = []; 30 31 /** 32 * @var string The hashed password 33 * @ORM\Column(type="string") 34 */ 35 private $password; 36 37 public function getId(): ?int 38 { 39 return $this->id; 40 } 41 42 /** 43 * A visual identifier that represents this user. 44 * 45 * @see UserInterface 46 */ 47 public function getUsername(): string 48 { 49 return (string) $this->username; 50 } 51 52 public function setUsername(string $username): self 53 { 54 $this->username = $username; 55 56 return $this; 57 } 58 59 public function __toString(): string 60 { 61 return $this->username; 62 } 63 64 /** 65 * @see UserInterface 66 */ 67 public function getRoles(): array 68 { 69 $roles = $this->roles; 70 // guarantee every user at least has ROLE_USER 71 $roles[] = 'ROLE_USER'; 72 73 return array_unique($roles); 74 } 75 76 public function setRoles(array $roles): self 77 { 78 $this->roles = $roles; 79 80 return $this; 81 } 82 83 /** 84 * @see UserInterface 85 */ 86 public function getPassword(): string 87 { 88 return $this->password; 89 } 90 91 public function setPassword(string $password): self 92 { 93 $this->password = $password; 94 95 return $this; 96 } 97 98 /** 99 * Returning a salt is only needed, if you are not using a modern 100 * hashing algorithm (e.g. bcrypt or sodium) in your security.yaml. 101 * 102 * @see UserInterface 103 */ 104 public function getSalt(): ?string 105 { 106 return null; 107 } 108 109 /** 110 * @see UserInterface 111 */ 112 public function eraseCredentials() 113 { 114 // If you store any temporary, sensitive data on the user, clear it here 115 // $this->plainPassword = null; 116 } 117} 118

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FKM

2021/08/06 06:24

テーブルadminの構造を教えて下さい。パスワードは一時的なバイナリを入れている可能性があります。
cherry2020

2021/08/07 05:27

FKMさん、コメントくださりありがとうございます。 「テーブルadminの構造を教えてください」とは、 ・テーブルとして今何があるか ・adminテーブルを作った時にどんなカラムを指定しているのか ・他のテーブルと関連づけを行っているのか という状態をお伝えする、という理解であっていますでしょうか???? 追記いたしましたので、よろしくお願いします。 足りないところがありましたら教えていただけると助かります。 お忙しいところありがとうございます????‍♀️
FKM

2021/08/07 05:32

プログラムじゃなくて、CUIやadminなどを使ってその変更処理が可能でしょうか?
cherry2020

2021/08/07 08:02

CUIやadminを使ってその変更処理をするとはどういう意味でしょうか? もう少し言葉の意味を教えてもらえたら幸いです???? 今はCUIのターミナルでSQL文を入れて、変更しようと思ったけれどできない状態です。 データベースに関するGUIは入れておりません????
guest

回答1

0

ベストアンサー

SQL文が有効なのか無効なのかを知るために別途アクセスできるようにした方がいいですよ。無効なSQL文をいくらプログラムに組み込んでも無意味なので。

今回の場合はパスワードを検索対象カラムとしてそのパスワードを変更しようとしているので、それはできません。必ず 

where句での検索対象でのカラム ≠ set句で変更対象のカラム

としてください。だいたいwhere文で紐付ける場合は主キーを使いますので、主キーを元にパスワードを変更してください。

投稿2021/08/07 15:43

FKM

総合スコア3640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問