在 Windows 2008 R2 上运行 SQL Server 2005 和 2008。
我们将减少开发人员在生产中的权限 -作为 DBA,我想为自己做同样的事情,限制生产权限并在需要时提升权限。
我的主要目标是消除DBA犯的愚蠢错误,开发人员最多将在生产中拥有读取权限。我们喜欢表现得好像我们是不会犯错的超级英雄,但没有一直拥有制作权是有道理的,这是一些人推荐的最佳做法。
最好的方法是什么?日常使用和安装过程中最不痛苦的是什么?
我们目前有一个针对 DBA 的 Windows 组,该组有权访问我们所有的服务器和数据库。
我也对降低操作系统/远程登录权限感兴趣 - 但我最关心的是数据库权限。
我猜我们需要提升权限才能以 sa 身份运行跟踪,并且可能需要在我们取消旧登录的 SA 权限之前进行一些所有权清理。我们可能会遇到哪些其他问题?
感谢您的建议和分享您的经验!
我有一位同事想要访问一个 SQL Server 2008 实例。我必须给他这个实例的权利。他应该有权做的是例如
我不想给他系统管理员权限,应该给他什么权限?
我有一个我依赖的愚蠢的应用程序,里面有硬编码的连接字符串。
为了提高我的 SQL Server 的安全性,我想让 SQL 用户与内部应用程序的硬编码相同,但我希望该用户只能从特定主机(IP 地址)使用 SQL Server。
我正在尝试在 Postgres 中设置一个角色,它可以 a) 创建一个新角色 b) 创建一个新数据库 c) 使该新角色成为数据库的所有者 d) 没有其他权限(尽可能!)
我试过这个:
sc_1=# CREATE ROLE tenant_admin CREATEDB CREATEROLE;
CREATE ROLE
sc_1=# CREATE ROLE user1 IN ROLE tenant_admin LOGIN NOINHERIT ENCRYPTED PASSWORD 'xyz';
CREATE ROLE
sc_1=#
Run Code Online (Sandbox Code Playgroud)
其次是(在另一个会话中)
tahaan@Komputer:~/projects/acme-project$ psql -U user1 -h localhost -d postgres
Password for user user1:
psql (9.3.6)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
postgres=> SET ROLE tenant_admin;
SET
postgres=> CREATE DATABASE "Tenant1" TEMPLATE "tenant_template";
CREATE DATABASE
postgres=> CREATE ROLE "owner1";
CREATE ROLE
postgres=> …Run Code Online (Sandbox Code Playgroud) 我刚刚在 Win8.1 的加入域的 VM 实例上成功安装了 SQL Server 2014 Express。
在我运行的安装过程中,我DOMAIN\Admin接受了将当前用户添加为 SQL 管理员的默认配置。但是,在完成后重新考虑后,我想使用该DOMAIN\DbAdmins组而不是域上的单个用户。
一切都很好。创建组,将其添加到 SSMS 中 SQL Server 的安全节点,将其置于 SysAdmin 角色中,授予“连接 SQL”安全性,然后我们就可以关闭并运行了——对吗?
没那么快。
安装程序映射DOMAIN\Admin到这两个数据库上的 dbo 用户:
当然,dbo 不能被修改或删除。
我想在不卸载和重新安装 Reporting Services 的情况下执行此操作。有可能这样做吗?
我需要使用散列密码编写应用程序角色的脚本,以便我可以将它从一个数据库复制到另一个数据库。
考虑以下示例代码,它使用应用程序角色为不受信任的用户提供提升的访问权限:
USE tempdb;
CREATE LOGIN LimitedLogin
WITH PASSWORD = 'Password1'
, CHECK_POLICY = OFF
, CHECK_EXPIRATION = OFF;
CREATE USER LimitedLogin
FOR LOGIN LimitedLogin
WITH DEFAULT_SCHEMA = dbo;
CREATE APPLICATION ROLE MyAppRole
WITH PASSWORD = 'Password2'
, DEFAULT_SCHEMA = dbo;
EXEC sp_addrolemember @rolename = 'db_datareader'
, @membername = 'MyAppRole';
CREATE TABLE dbo.Numbers
(
[Number] int CONSTRAINT PK_Numbers
PRIMARY KEY CLUSTERED
IDENTITY(1,1) NOT NULL
);
INSERT INTO dbo.Numbers
VALUES (1)
, (2);
GO
Run Code Online (Sandbox Code Playgroud)
一旦我们在 tempdb 中创建了测试设置,我们就可以以[LimitedLogin]用户身份登录,并运行以下命令:
-- login …Run Code Online (Sandbox Code Playgroud) 在 SQL Server 2008 中配置 TDE 时是否有任何最佳实践?在 SQLMag 上,“透明数据加密常见问题解答”一文说 CPU 的使用率可能增加了 30%?
除了增加服务器马力之外,DBA 在打开 TDE 时通常还会做些什么吗?
看起来对于单个用户,我应该创建一个登录角色而不是相应的组角色,因为我无法直接为登录角色分配权限。这是真的吗?这种分离的目的是什么?
此外,据我所知,只能使用login role进行身份验证。那么组角色中密码字段的目的是什么?或者可以作为组角色进行身份验证?那么为什么有人需要登录角色呢?
看起来我也可以在 pg_hba 中设置登录和组角色。
我在 GP 表上有一个触发器,用于记录关键字段何时更改以及谁更改了它。下面是触发器的示例。
CREATE TRIGGER [dbo].[TRACKAPP_UPDATE] ON [dbo].[Table]
AFTER UPDATE
AS
DECLARE @MDFUSRID char(15)
DECLARE @SOPNUMBE char(32)
DECLARE @DOCSTATUS INT
BEGIN
BEGIN
IF UPDATE(DOCSTATUS)
BEGIN
SELECT @MDFUSRID = SESSION_USER
SELECT @SOPNUMBE = SOPNUMBE FROM inserted
SELECT @DOCSTATUS = DOCSTATUS FROM INSERTED
Run Code Online (Sandbox Code Playgroud)
在 99% 的情况下,这会返回更改该字段的用户的正确名称。如果任何 ERP 人员更改了某个字段(包括我自己),用户就会显示 dbo。我一直认为这是一个访问问题。然而,我们发现一些用户也以 dbo 而不是他们的名字返回。
您对我应该从哪里开始寻找有什么建议吗?
我的数据库目前被隔离在它自己的实例和 VM 中。我的客户正在淘汰该服务器,我需要将数据库迁移到新环境。我的数据库使用 CLR,所以新环境需要启用它。
客户建议使用现有服务器和现有 SQLServer 2014 标准实例托管来自其他软件供应商的数据库。我担心会产生一种“你破坏它,你买了它”的责任,因为我不能保证其他数据库或其前端的安全策略。我不想做会带来重大风险的事情。
我不时遇到与其他客户类似的情况。我是一名数据库开发人员。我偶尔会为我的中小型企业客户提供与我自己的产品相关的 DBA 服务,但我绝不是一名熟练的 DBA。每个客户都有不同的预算、优先级、IT 人员和安全策略,但通常他们都没有 IT/DBA 可以理解和/或在此详细级别进行称职的风险评估。
在共享实例上启用 CLR 会如何影响其他 DB 的安全性?(我不是在询问数据库级别的权限集级别,只是启用 CLR 本身)。我需要充分了解风险(如果有的话),以便能够建议“最佳实践”和特定于客户的“足够安全”的替代方案。
security ×10
sql-server ×8
postgresql ×2
logins ×1
permissions ×1
role ×1
scripting ×1
sql-clr ×1
trigger ×1
users ×1