标签: database-permissions

Postgresql:最好使用多个数据库,每个数据库有1个模式,还是1个数据库有多个模式?

在对我的一个问题发表评论之后,我在想是否更好地使用带有X架构的1个数据库,反之亦然.

我的情况:我正在开发一个网络应用程序,当人们注册时,我创建(实际上)数据库(不,它不是社交网络:每个人都必须能够访问自己的数据,永远不会看到其他用户的数据).

这就是我用于我的应用程序的先前版本(仍然在mysql上运行)的方式:通过plesk api,对于每次注册,我这样做:

  1. 创建具有有限权限的数据库用户;
  2. 创建一个只能由以前创建的用户和超级用户访问的数据库(用于维护)
  3. 填充数据库

现在,我需要对postgresql做同样的事情(项目越来越成熟,mysql ......不能满足所有需求)

我需要使所有数据库/模式备份独立:pg_dump在两种方式下都能很好地工作,对于可以配置为仅访问1个模式或1个数据库的用户来说是相同的.

所以,假设你是比我更有经验的potgres用户,你认为对我的情况最好的解决方案是什么,为什么?

使用$ x db而不是$ x schemas会有性能差异吗?什么解决方案将来会更好地维护(可靠性)?

编辑:我差点忘了:我所有的数据库/模式将始终具有相同的结构!

Edit2:对于备份问题(使用pg_dump),使用1 db和多个模式可能更好,一次性转储所有模式:恢复将非常简单地在dev机器中加载主转储然后转储和恢复所需的模式:还有1个额外的步骤,但是倾倒所有架构似乎更快,然后逐个转储它们.

ps:对不起,如果我在文本中忘记了一些'W'字符,我的键盘会受到该按钮的影响;)

更新2012年

那么,应用程序的结构和设计在过去的两年中发生了很大变化.我仍在使用这种one db with many schemas方法,但是,我的应用程序的每个版本都有1个数据库:

Db myapp_01
    \_ my_customer_foo_schema
    \_ my_customer_bar_schema
Db myapp_02
    \_ my_customer_foo_schema
    \_ my_customer_bar_schema
Run Code Online (Sandbox Code Playgroud)

对于备份,我定期转储每个数据库,然后在开发服务器上移动备份.

我也使用PITR/WAL备份,但正如我之前所说,它不太可能我必须立即恢复所有数据库 ..所以它可能会被解雇今年(在我的情况下不是最好的方法).

从现在开始,1-db-many-schema方法对我来说非常有效,即使应用程序结构完全改变了:

我差点忘了:我所有的数据库/模式将始终具有相同的结构!

...现在,每个模式都有自己的结构,可以改变对用户数据流的反应.

database postgresql database-design database-permissions

133
推荐指数
6
解决办法
7万
查看次数

什么对SCHEMA的使用确实如此?

我正在尝试第一次创建一个Postgres数据库,所以这可能是一个愚蠢的问题.我为必须从我的php脚本访问数据库的db角色分配了基本的只读权限,我有一个好奇心:如果我执行

GRANT some_or_all_privileges ON ALL TABLES IN SCHEMA schema TO role;
Run Code Online (Sandbox Code Playgroud)

是否还需要执行

GRANT USAGE ON SCHEMA schema TO role;
Run Code Online (Sandbox Code Playgroud)

来自文档:

用法:对于模式,允许访问指定模式中包含的对象(假设还满足对象自己的权限要求).从本质上讲,这允许被授权者在模式中"查找"对象.

我认为如果我可以选择或操作模式中包含的任何数据,我可以访问模式本身的任何对象.我错了吗?如果没有,GRANT USAGE ON SCHEMA用于什么?文档的含义与"假设对象的特权要求也得到满足"完全相同"?

database postgresql schema grant database-permissions

98
推荐指数
3
解决办法
10万
查看次数

没有主机的pg_hba.conf条目

当我尝试使用DBI连接时出现以下错误

DBI connect('database=chaosLRdb;host=192.168.0.1;port=5433','postgres',...) 
failed: FATAL:  no pg_hba.conf entry for host "192.168.0.1", user "postgres", database "chaosLRdb", SSL off

这是我的pg_hba.conf文件:

# "local" is for Unix domain socket connections only
local   all         all                               md5
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

host    all         postgres    127.0.0.1/32          trust

host    all        postgres     192.168.0.1/32        trust

host    all        all         192.168.0.1/32        trust

host    all        all         192.168.0.1/128        trust

host    all        all         192.168.0.1/32        md5

host    chaosLRdb    postgres         192.168.0.1/32      md5
local …
Run Code Online (Sandbox Code Playgroud)

postgresql perl database-permissions

56
推荐指数
7
解决办法
17万
查看次数

截断表的权限

在MSSQL中,为了能够截断表,我需要什么权限来授予用户权限?

我正在尝试授予最小的权限集,但我不能使用DELETE,因为表非常大,我希望操作很快.

sql-server database-permissions

41
推荐指数
3
解决办法
8万
查看次数

授予用户仅查看mysql视图的权限

以下问题适用于MySQL 5.1.44

假设我有一个表,其中包含由我的应用程序的不同用户插入的记录.如何授予特定用户访问权限,仅查看该表中的记录?我已经考虑VIEW用他/她的记录创建一个,但我不知道如何创建一个只能看到它的mysql用户VIEW.

那么,是否有可能创建一个只能访问单个用户的mysql用户VIEW?这个用户也可以这样做,以便他们只读访问权限VIEW吗?

谢谢!

PS:在我的例子中,我称之为用户的是真正的附属办事处,他们希望使用自己的应用程序访问他们的记录.

mysql permissions view grant database-permissions

27
推荐指数
4
解决办法
7万
查看次数

SQL Server禁用所有触发器 - 找不到对象"XXXX",因为它不存在或您没有权限

我正在尝试在SQL Server中运行此命令:

disable trigger all on MYDB
Run Code Online (Sandbox Code Playgroud)

这对我来说是失败的.我登录的帐户可以访问MYDB,我几乎可以获得每个可用的权限(它只是本地数据库和我的帐户,所以这没关系).我不明白为什么它告诉我它找不到MYDB呢?我之前做过这个.另请注意:我可以从数据库中进行选择,更新并运行grant语句(例如授予proc的执行权限).我也可以手动禁用触发器...

那为什么会失败?我之前能做到......

谢谢.

sql-server permissions database-permissions

25
推荐指数
1
解决办法
3万
查看次数

在只读模式下sql open connection

这个问题来自好奇心.我搜索谷歌这个但没有得到线索.

假设用户具有对MySQL数据库的完全读/写访问权限.我想知道,是否有任何方式(连接字符串中的某些参数)以只读模式通过相同的用户名和密码连接到数据库?

我想要这样做 而不更改此用户的权限,因为同一用户在其他时间也可能需要写入权限.这将有助于(如果可能)防止意外修改数据库.

mysql database-connection database-permissions

24
推荐指数
3
解决办法
2万
查看次数

为什么PostgreSQL将用户和组合并为角色?

来自PostgreSQL文档:

角色的概念包含"用户"和"组"的概念.在8.1之前的PostgreSQL版本中,用户和组是不同类型的实体,但现在只有角色.任何角色都可以充当用户,组或两者.

为什么他们在8.1中做出这个改变?

从C编码器的角度来看,使用单个Role类(struct)可能更容易?

更多细节:

CREATE USER is equivalent to CREATE ROLE except that CREATE USER 为用户/角色提供LOGIN权限.

(我即将为我的webapp设计一个权限系统,因此我对此感兴趣.)

postgresql roles database-permissions

23
推荐指数
2
解决办法
8652
查看次数

如何在Postgresql中为所有数据库创建具有只读权限的用户?

我想为所有数据库中的所有表创建一个只具有select权限的用户.我以为我可以获取数据库列表并为每个数据库应用以下命令:

GRANT select ON DATABASE dbname to user1;
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

ERROR:  invalid privilege type SELECT for database
Run Code Online (Sandbox Code Playgroud)

当我用谷歌搜索时,人们建议grant select对所有桌子进行操作.但总是会添加新表.所以这对我来说不是一个可接受的解决方案.有谁知道任何变通方法?

security postgresql permissions database-permissions

21
推荐指数
2
解决办法
3万
查看次数

授予具有特定前缀的多个表的权限

我使用表前缀方法让几个客户端使用相同的数据库.每个客户端创建的表数量约为55.而不是通过手动列出表格来完成所有授权,我可以执行以下操作吗?

GRANT SELECT,INSERT,UPDATE,DELETE ON database.prefix_* TO 'username'@'localhost' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)

mysql database grant database-permissions

16
推荐指数
1
解决办法
2万
查看次数