我在 Debian 机器上有一个 PostgreSQL 数据库,并且我已经(来自 shell):
su postgres
createdb dnls
createuser dnls -P
Enter password for new user: somepass [enter]
Enter it again: somepass [enter]
Shall the new user be allowed to create databases? (y/n) n [enter]
Shall the new user be allowed to create more new users? (y/n) n [enter]
之后,我在我的 Django 应用程序 settings.py 中添加了 user/pass/dbname,然后我做了一个manage.py syncdb
,django 为我的模型创建了表。
为什么 dnls 用户对 dnls 数据库具有读/写权限?
我在任何地方都没有给他任何权限。
他是否因为数据库与他同名而具有访问权限?这看起来不安全。
您的新用户不会仅仅因为他的名字与数据库相同而自动获得对您的数据库的读/写权限。如果您查阅 createdb 和 createuser 手册页,您将找到该信息。
正在发生的事情是,即使该用户不是所有者,他也有权读取/写入所有没有特别限制的数据库。这由在数据库创建期间使用的模板控制。如果您不喜欢这种行为,您可以创建自己的模板,并在将来创建数据库时使用该模板。