公司核准名称网站个人网站如何优化关键词
起因:需要浏览器在线做一些测评,但我的 Chrome 没有摄像头/麦克风权限,并且在设置中是没有手动添加按钮的。
我尝试了重装软件,更新系统(上面的 13.5 就是这么来的,我本来都半年懒得更新系统了),都没有任何用。
 
 
系统版本:MacOS 13.5.1(需要开启 sip,可参考 macOS 开启或关闭 SIP - 少数派 (sspai.com))
思路来源:https://blog.csdn.net/cneducation/article/details/111403294 ,但这篇在新版本已经失效了,数据表格式和一些值的含义做了一些修改,所以,我这里提供的语句,也并非一定可以执行。本篇后面讲简单讲述下原理,只要知道了原理,只要存储方式没有大更改,都没问题。
例如:向 Chrome 添加摄像头、麦克风权限
/usr/bin/sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT INTO access VALUES('kTCCServiceMicrophone','com.google.Chrome',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);"/usr/bin/sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT INTO access VALUES('kTCCServiceCamera','com.google.Chrome',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);"
 
想知道原理,就继续往下看吧,下面路径中保存着的 SQLite 数据库文件就是 MacOS 的权限配置信息
~/Library/Application Support/com.apple.TCC/TCC.db
 
使用 PRAGMA table_info(access) 可以看到表结构,重要的就两个 service(权限名称), client(应用包名)
 
第一步:确认包名
- 首先要打开访达,点击左侧应用程序,找到要增加权限的 app
 - 右键,显示包内容,进入 contents ,找到 info.list
 - 定位到这一行 
<key>CFBundleIdentifier</key>,下面的<String>标签里的内容就是我们要找的包 
第二步:确认权限名
kTCCServiceCamera 是摄像头权限,kTCCServiceMicrophone 是麦克风权限,整体可读性还是很高的,我根据设置中的权限推测出下表,有几个不确定
| 权限服务 | 解释 | 
|---|---|
| kTCCServiceAddressBook | 访问通讯录的权限。 | 
| kTCCServiceAppleEvents | 发送和接收 Apple 事件的权限。 | 
| kTCCServiceBluetoothAlways | 永久访问蓝牙设备的权限。 | 
| kTCCServiceCalendar | 访问日历的权限。 | 
| kTCCServiceCamera | 访问摄像头的权限。 | 
| kTCCServiceFileProviderDomain | 访问文件与文件夹权限。 | 
| kTCCServiceFocusStatus | ? | 
| kTCCServiceLiverpool | ? | 
| kTCCServiceMicrophone | 访问麦克风的权限。 | 
| kTCCServicePhotos | 访问照片库的权限。 | 
| kTCCServiceReminders | 访问提醒事项的权限。 | 
| kTCCServiceSystemPolicyDesktopFolder | 访问桌面文件夹的系统策略权限。 | 
| kTCCServiceSystemPolicyDocumentsFolder | 访问文稿文件夹的系统策略权限。 | 
| kTCCServiceSystemPolicyDownloadsFolder | 访问下载文件夹的系统策略权限。 | 
| kTCCServiceSystemPolicyNetworkVolumes | 访问网络卷的系统策略权限。 | 
| kTCCServiceSystemPolicyRemovableVolumes | 访问可移动卷的系统策略权限。 | 
| kTCCServiceUbiquity | ? | 
有了包名和权限名就能唯一定位一个应用程序和一个权限了,接着,剩下的值找已经有摄像头/麦克风权限的软件抄一抄
SELECT * FROM access where service = 'kTCCServiceMicrophone' 
SELECT * FROM access where service = 'kTCCServiceCamera' 
 
于是就有了下列语句,给 chrome 添加摄像头/麦克风权限
INSERT INTO access VALUES('kTCCServiceMicrophone','com.google.Chrome',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);
INSERT INTO access VALUES('kTCCServiceCamera','com.google.Chrome',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);
 
 
还有能 run 的 python 代码我放在这了,这个是给 edge 加摄像头权限的,根据需要自行更改
import sqlite3# 连接到 SQLite 数据库文件
conn = sqlite3.connect(r'/Users/xxx/Library/Application Support/com.apple.TCC/TCC.db')  # 替换 'example.db' 为你的数据库文件名# 创建一个游标对象来执行 SQL 查询
cursor = conn.cursor()# 执行 SQL 查询
# cursor.execute("""SELECT * FROM access where client = 'com.tencent.meeting' """)  # 替换 'your_table_name' 为你的表名
# cursor.execute("""SELECT * FROM access where client = 'com.microsoft.edgemac' """)  # 替换 'your_table_name' 为你的表名
# cursor.execute("PRAGMA table_info(access)")
cursor.execute("""INSERT INTO access VALUES('kTCCServiceCamera','com.microsoft.edgemac',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);""")
conn.commit()  # 提交事务# 获取查询结果
result = cursor.fetchall()# 遍历结果并处理数据
for row in result:print(row)  # 在这里你可以根据需要处理每一行的数据# 关闭游标和数据库连接
cursor.close()
conn.close()
