简短版本:如何编写SQL过程来列出特定用户可以访问MySQL数据库中的几个表中的哪一个?
更长的版本:
我正在编写一个多用户应用程序,它使用公司的几个分支机构的数据访问数据库.数据库具有许多任何用户都可以访问的查找表,以及只有授权用户才能访问的每个分支的表.我的策略是:
我无法弄清楚如何编写这样的存储过程.SHOW GRANTS FOR CURRENT_USER是一个明显的可能性,但解析如下:
GRANT SELECT ON Company.BranchABC TO 'auser'@'%clientdomain.com'
Run Code Online (Sandbox Code Playgroud)
在SQL弄清楚表是什么,似乎这样太乱了.SELECT从拥有权限的实际表中执行a 操作似乎也有问题,因为我必须复制MySQL的逻辑以组合来自各种表(用户,数据库,主机等)的权限.
任何智慧的话?
我需要找出哪个模式已经被授予Oracle 10g数据库中某个对象的执行权限(在本例中是一个包).这对我来说最简单的方法是什么?是否有内置函数来提供此信息?
我刚刚从SQL2000迁移到SQL2008,并且我已经开始在使用sp_OACreate的存储过程中获得执行权限问题.
系统的其余部分可以正常使用已经设置并添加到数据库的db登录.
我试过了:
USE master
GO
GRANT EXEC ON sp_OACreate TO [dbuser]
GO
Run Code Online (Sandbox Code Playgroud)
但是这失败了以下错误:
消息15151,级别16,状态1,行1无法找到用户'dbuser',因为它不存在或您没有权限.
我以完全权限登录到sa服务器.我可以执行类似的sql语句并将权限应用于服务器角色,但不是登录/用户.
如何将更改应用于特定用户/登录?
我可以将权限应用于公共角色,它可以解决我的问题; 但是这对我来说似乎是一个安全问题,我真的不想应用于实时服务器.
我的公司聘请了一家承包商为我们做一个小项目,他需要从我们的主数据库(SQL Server 2005)中的一个单一视图中选择数据.
我想SQL Server为他创建一个锁定的登录,只需SELECT从"他的"视图中获得权限......而不是别的.
所以我在服务器上创建了一个新用户,然后我就这一个视图给了他许可:
grant select on SpecialView to SpecialUser;
Run Code Online (Sandbox Code Playgroud)
基本上,这工作 - 他看不到任何我们的表和存储过程,无论任何观点,除了"他"的一个.
但:
显然,他的权限会被自动锁定(sys.objects只显示了他具有权限的对象,sp_who只显示了自己的流程等).
所以,我的问题是:
是否可以创建无法访问系统视图和存储过程的用户?
(如果是的话,我做错了什么?)
或者是否有一些理由为什么即使是锁定的用户也需要访问系统视图和存储过程?
编辑:
kevchadders,用户必须为master,model或msdb中没有访问-只与他应该看到的视图的数据库.
但是,要清楚一点:系统视图/特效,用户可以看到的是在数据库中,其中"他"的观点是 ......不是在master数据库中.所以我无法禁用他的所有访问权限,因为他需要从同一个数据库中的一个视图中进行选择.
问题是,即使我明确地只为单一视图,他应该看到,为什么他还是看到了系统的意见/特效以及设置权限?
当我使用自己的域帐户登录我们的TFS服务器并尝试打开TFS管理控制台时,出现以下错误:
TF246017:Team Foundation Server无法连接到数据库.验证托管数据库的服务器是否正常运行,以及网络问题是否阻止与服务器的通信.
TFS数据库在TFS服务器上本地运行.当我使用本地计算机管理员帐户(可能是用于安装TFS的帐户)登录到TFS服务器时,管理控制台可以正常加载而不会出现任何错误.因此,我使用SSMS查看本地TFS数据库及其登录,并且看到本地TFS服务器用户帐户列出了完全权限,但我的域帐户不是.因此错误.
最后,我的问题.什么我喜欢做的是提供许可的TFS数据库(从而没有错误运行管理控制台的能力)的特定用户,一拉的本地管理员帐户.而不是通过SSMS将每个用户添加为登录,是否有一个TFS组,我可以将它们添加到那个将自动授予他们TFS数据库的权限?那似乎有点清洁.
谢谢.
permissions tfs administrator active-directory database-permissions
在过去的几个小时里,我一直在用力撞击这堵墙,我的头脑很血腥.:(
正如标题所暗示的,我已经创建了一个可以访问数据库MySQL用户罚款从MySQL命令提示符在数据库服务器上.但是,当我尝试实例化一个新的PDO对象以使用同一个用户访问数据库时,我得到:
SQLSTATE[42000] [1044] Access denied for user 'bob'@'localhost' to database 'my_database'
Run Code Online (Sandbox Code Playgroud)
这是我创建用户的方式:
GRANT SELECT, DELETE, EXECUTE, INSERT, UPDATE ON my_database.* TO 'bob'@'localhost' IDENTIFIED BY 'some_password';
Run Code Online (Sandbox Code Playgroud)
这可能是什么问题?!请有人给我一个骨头!(仅供参考,当我尝试创建一个新的PDO对象时会出现问题...我捕获了一个PDOException,这就是消息).
授权后我做了FLUSH PRIVILEGES,这是SHOW GRANTS的输出:
mysql> SHOW GRANTS FOR 'bob'@'localhost';
+------------------------------------------------------------------------------------------------------------+
| Grants for bob@localhost |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bob'@'localhost' IDENTIFIED BY PASSWORD '.........................................' |
| GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `my_database`.* TO 'bob'@'localhost' |
+------------------------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
以下是这个用户的mysql.db:
mysql> SELECT * FROM db WHERE User = 'bob'\G;
*************************** …Run Code Online (Sandbox Code Playgroud) 这听起来很愚蠢,但我发现它确实令人困惑:在MSDN中,定义是可以请求SQL Server资源的实体.基本上有三种类型的主体:Windows级主体,SQL Server级主体和数据库级主体.到目前为止一切都很好.只是它给我的印象是一个主体的标识符应该与其他主体不同,无论这个原则是什么类型.(如果这三种类型的所有主体都可以安排在一个表中,它们将具有唯一标识符)
令人困惑的部分来自以下三个问题:
1)
Select name,principal_id from sys.database_principals
Run Code Online (Sandbox Code Playgroud)
(注意:我在一个数据库上运行它)
2)
Select name,principal_id from sys.server_principals
Run Code Online (Sandbox Code Playgroud)
现在我知道第一个返回数据库用户主体,而第二个返回服务器用户主体(如果我错了,请纠正我).但是为什么第一个查询中的一行可以与第二个查询中的一行具有相同的principal_id?例如,数据库主体中的一行将是:
名称:INFORMATION_SCHEMA,principal_id:3
而第二个查询中的一行是
name:sysadmin,principal_id:3
这两个principal_id是什么?正如我所提到的,我认为两个主体的标识符会有所不同,即使一个是DB用户而另一个是服务器用户(并且从名称我假设principal_id是标识符).
好吧,如果principal_id对于所有主体都不是唯一的,但在每个查询的范围内只是唯一的(第一个查询中的principal_id只是数据库用户的标识符,所以它可能恰好与服务器用户的相同),然后我有第三个查询,不明白它是什么意思:
3)
SELECT
SDP.PRINCIPAL_ID AS [Principal ID],
SDP.NAME AS [Database UserName],
SDP.TYPE_DESC AS [Datebase UserType],
SSP.NAME AS [Server LoginName],
SSP.TYPE_DESC AS [Server LoginType]
FROM sys.database_principals SDP
INNER JOIN sys.server_principals SSP
ON SDP.PRINCIPAL_ID = SSP.PRINCIPAL_ID
Run Code Online (Sandbox Code Playgroud)
如果两个principal_id在其范围内仅是唯一的,那么在两个principal_id上进行内连接意味着什么?内连接意味着此列是共同唯一的,对吧?
必须有一些我误解的非常基本的东西.感谢您的帮助!
为了记录我正在开发的应用程序的使用情况,我需要每个使用我的应用程序的用户在他们自己的凭据下对我的SQL Server数据库执行查询.
为了不以可检索的方式存储他们的密码,我无法在每个用户的基础上创建连接(因为这需要在他们登录时知道他们的密码经过简短的窗口).
对这个问题(可能是次优的)的看似明显的解决方案是将所有敏感查询作为通用"应用程序"用户运行,模拟登录用户(要求我仅将登录用户与用户名相关联). ..这不是一件坏事).
我的问题是,我不确定如何模仿某个角色的所有用户或一般所有用户(不是最明智的想法,因为我不希望该应用模仿系统管理员).
grant impersonate on all to ApplicationLogin
Run Code Online (Sandbox Code Playgroud)
不起作用,并且没有我能找到的文件表明授予角色成员模仿是可行的......
有任何想法吗?
我想创建一个不可变的 Postgres 数据库,用户可以在其中插入和选择(写入和读取)数据,但无法更新或删除数据。
我知道FOR UPDATE锁,但不知道如何使用它。
举例来说,我有下表,如何使其不可变(或者,如果我理解正确,如何FOR UPDATE永久使用锁)
CREATE TABLE account(
user_id serial PRIMARY KEY,
username VARCHAR (50) UNIQUE NOT NULL,
password VARCHAR (50) NOT NULL,
email VARCHAR (355) UNIQUE NOT NULL,
created_on TIMESTAMP NOT NULL,
last_login TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud) 我已经以数据库所有者(也是超级用户)的身份登录到我的数据库,并创建了一个role_write带有 nologin 和 noinherit 标志的角色。
我已通过以下方式撤销了公共架构的默认创建权限:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)
并通过以下方式撤销对数据库的公共访问:
REVOKE ALL ON DATABASE mydb FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)
我已在每个表上授予角色,我希望该角色能够具有读/写访问权限。使用user本示例的表格,我添加了:
grant insert, select, update, delete on users to role_write;
Run Code Online (Sandbox Code Playgroud)
然后,我还为用户授予了对表、模式、序列和数据库连接的适当权限,并通过以下方式更改了默认权限:
GRANT CONNECT ON DATABASE my to role_write;
grant usage on schema public to role_write;
grant select, insert, update, delete on all tables in schema public to role_write;
grant usage, select on all sequences in schema public to role_write;
alter default privileges in schema public …Run Code Online (Sandbox Code Playgroud) sql-server ×4
mysql ×2
postgresql ×2
security ×2
database ×1
grant ×1
oracle ×1
oracle10g ×1
pdo ×1
permissions ×1
php ×1
principal ×1
t-sql ×1
tfs ×1