sqlserver 想给mdm_zj用户增加查看mdm.TD_SUBJECT
时间: 2024-09-14 22:05:45 浏览: 38
在 SQL Server 中,如果你想给名为 `mdm_zj` 的用户增加查看 `mdm.TD_SUBJECT` 表的权限,你需要执行几个步骤:
1. **首先确保用户存在**:你可以使用如下的查询检查该用户是否存在:
```sql
SELECT * FROM sys.database_principals WHERE name = 'mdm_zj'
```
如果用户不存在,你需要先创建用户并分配适当的数据库角色,例如 `db_datareader`。
2. **确定用户权限级别**:如果用户已经有了 `db_datareader` 权限,那么他们应该已经可以查看数据了。如果没有,需要添加:
```sql
GRANT SELECT ON mdm.TD_SUBJECT TO mdm_zj;
```
3. **验证权限**:
```sql
EXEC sp_grantviewobject TO mdm_zj ON SCHEMA::mdm; -- 如果权限只针对某个架构(schema)
```
4. **注意安全策略**:确保这一步骤符合你们的安全策略,避免不必要的权限过度授予。
相关问题
sqlserver 不想mdm_zj用户查看mdm.TD_SUBJECT权限
在SQL Server中,如果你不想让名为"mdm_zj"的用户能够查看"mdm.TD_SUBJECT"表的数据,你可以通过以下几个步骤调整权限:
1. 登录到SQL Server Management Studio (SSMS) 或者使用Transact-SQL命令行工具。
2. 使用`GRANT`和`DENY`语句来管理权限。首先,你需要确保这个用户当前没有对该表的查询权限。可以运行类似下面的查询检查当前的权限设置:
```
SELECT * FROM sys.database_permissions
WHERE grantee_principal_id = DB_ID('mdm_zj') AND object_name = 'mdm.TD_SUBJECT';
```
3. 如果查询结果显示该用户有SELECT权限,使用`REVOKE`语句撤回权限,例如:
```sql
REVOKE SELECT ON mdm.TD_SUBJECT FROM mdm_zj;
```
这将阻止"mdm_zj"用户访问"TD_SUBJECT"表。
4. 如果希望更细致地控制,可以在特定条件下允许查询,可以使用`DENY`语句来禁止所有情况下的查询:
```sql
DENY SELECT ON mdm.TD_SUBJECT TO mdm_zj;
```
然后使用`GRANT`加上特定的WHERE条件来提供例外:
```sql
GRANT SELECT (column1, column2) ON mdm.TD_SUBJECT TO mdm_zj WITH GRANT OPTION
WHERE some_condition; -- 替换为实际的过滤条件
```
记住,`DENY`权限总是优先于`GRANT`,所以在应用上述策略时,请确保它们按照正确的顺序排列。
帮我改下代码 SELECT gu.DEPT_CHN_DESc, ke.DEPT_CHM_DESC, fbu.DEPT_CHN_DESC FROMesb_tm_mdm_hr_organization gu LEFT 3oIN esb_tm_mdm_hr_organization ke ON gu.PARENT_DEPT_ID = ke.DEPT_ID AND gu.COWPANY_CODE = ke .CONPAY_CODEesb_tm_mdm_hr_organization fbu oN ke .PARENT_DEPT_ID = fbu.DEPT_TD AD ke.coNPAiY_CODE = fbu.CONPAY_CODEwHERE gu.DEPT_LEVEL = '50' AND gu.DEPT_ID = '110103l
好的,我来帮你改一下这段 SQL 语句:
```
SELECT gu.DEPT_CHN_DESC, ke.DEPT_CHN_DESC, fbu.DEPT_CHN_DESC
FROM esb_tm_mdm_hr_organization gu
LEFT JOIN esb_tm_mdm_hr_organization ke
ON gu.PARENT_DEPT_ID = ke.DEPT_ID AND gu.COMPANY_CODE = ke.COMPANY_CODE
LEFT JOIN esb_tm_mdm_hr_organization fbu
ON ke.PARENT_DEPT_ID = fbu.DEPT_ID AND ke.COMPANY_CODE = fbu.COMPANY_CODE
WHERE gu.DEPT_LEVEL = '50' AND gu.DEPT_ID = '1101031';
```
我做了以下几个修改:
1. 将 "LEFT 3oIN" 改成了 "LEFT JOIN",修正了语法错误;
2. 将 ".CONPAY_CODE" 改成了 ".COMPANY_CODE",修正了拼写错误;
3. 将 "AD" 改成了 "AND",修正了语法错误;
4. 将 "110103l" 改成了 "1101031",修正了拼写错误。
希望能帮到你!
阅读全文